java棘手问题完整数组

时间:2017-11-08 13:21:07

标签: java arrays

如果数组的所有元素都大于0,并且所有小于最大偶数的偶数都在数组中,则数组被定义为完整。 例如{2,3,2,4,11,6,10,9%,8}是完整的,因为

一个。它的所有元素都大于0

湾最大偶数是10 c。所有偶数是小于10(2,4,6,8)是在数组中。

但是{2,3,3,6}是不完整的,因为偶数4丢失。 {2,3,4,3,6}未完成,因为它包含负数。 写一个名为isComplete功能如果数组参数是一个完整的数组,返回1。否则返回0

这是一个我必须解决的问题,但我无法找到这个问题的良好逻辑。在这里,我在第一个循环和第二个循环中找到了数组中的最大偶数,我必须检查所有偶数小于最大偶数,我坚持这个。请帮帮我,,,,,,,,,,我的代码在下面

public class Complete {
  public static void main(String[] args) {
    System.out.println(isComplete(new int[]{2,3,2,4,11,6,10,9,8}));
    System.out.println(isComplete(new int[]{2,3,3,6}));
    System.out.println(isComplete(new int[]{2,-3,4,3,6}));
  }

  private static int isComplete(int[] i) {
    int set = 1;
    int maxeven = 0;  
    int count = 0;
    for(int a = 0; a < i.length; a++) {
      if(i[a] < 0) {
        set = 0;
          break;
        }
        if(i[a]%2 == 0 && i[a] > maxeven) {
          maxeven = i[a];
        }
     }

     for (int c = 2; c <= maxeven; c=c+2) {
       for( int b = 0; b<i.length; b++) {
         if (c == i[b]) {
           count++;
         }
      }
      if (count > 0) {
        set = 1;
      } else {
        set = 0;
        break;
      }         
    }
    return set;
  }

}

2 个答案:

答案 0 :(得分:2)

  

我在第一个循环中找到了数组中的最大偶数   第二个循环,我必须检查所有偶数小于   最大偶数

我遵循了这个逻辑并写了这个。我正在检查条件1(所有元素&gt; 0)的有效性,并在相同的循环中找到最大的偶数。 在第二个循环中,我正在检查是否所有偶数都小于最大偶数nuber。

public class Complete {
    public static void main(String[] args) {
        System.out.println(isComplete(new int[] { 2, 3, 2, 4, 11, 6, 10, 9, 8 }));
        System.out.println(isComplete(new int[] { 2, 3, 3, 6 }));
        System.out.println(isComplete(new int[] { 2, -3, 4, 3, 6 }));
    }

    private static int isComplete(int[] i) {
        int maxEven = 0;

        for (int element : i) {
            if (element <= 0) {
                return 0;
            }
            if (element % 2 == 0) {
                if (element > maxEven) {
                    maxEven = element;
                }
            }
        }

        for (int a = 2; a < maxEven; a = a + 2) {
            if (!hasElement(i, a)) {
                return 0;
            }
        }
        return 1;
    }

    private static boolean hasElement(int[] i, int a) {
        for (int element : i) {
            if (element == a) {
                return true;
            }
        }
        return false;
    }
}

答案 1 :(得分:1)

在第二个循环中设置count = 0,如下所示:

for(int c = 2; c<=maxeven;c=c+2){
    count = 0;
    for(int b = 0;b<i.length;b++){

那应该可以解决你的问题。如果没有count = 0,在您查找“2”后,计数将为> 0,因此即使没有“4”,当您查找“4”时,计数&gt; 0也会为真。