关于java:嵌套for数组中缺少的循环整数

nested for loops integers missing from array

这里是初学者。我在运行这个for循环序列以查找数组中缺少的整数时遇到问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class FunWithArrays{
    public static void main(String[] args){
        String nString = args[0];
        int n = Integer.parseInt(nString);
        int inputArray [] = {1,2,4};
        System.out.println(" The missing numbers are" );
        findMissingNum(n, inputArray);
    }
    public static void findMissingNum(int n, int[] inputArray){
        for (int i = 1; i <= inputArray.length; i++){
            int count = 0;
            for( int j = 0; j < n; j++){
                if(inputArray[j] == i){
                    count ++;
                }
                if (count == 0){
                    System.out.println(i);
                }
            }
        }  
    }
}

我得到了我想要的答案,即3,但是它不打印,而是显示在运行时错误中:

1
2
3
java.lang.ArrayIndexOutOfBoundsException: 3
at FunWithArrays.findMissingNum(FunWithArrays.java:17)
at FunWithArrays.main(FunWithArrays.java:9)

该方法应该从用户(当程序运行时)处获取输入n作为数组的最大值,并打印所有缺少的值。逻辑是外部for循环应遍历数组中的数字1-n,内部循环应在每次找到某个数字时添加到count变量中。在迭代结束时,它应该打印最终"计数"为0的任何数字。这简直让我发疯了!!!!事先谢谢:)


  • 首先,您应该从0遍历到inputaray的(inputaray.length-1)索引。因为Java数组索引从0开始,而不是从1开始,这将去掉ArayIdExxOutOfFunsExtExchange。

  • 对于内环,从0到n,因为n是最大数。

  • 第三,它应该是inputaray[i]==j,而不是inputaray[j]==i,与打印值相同。在您的情况下,我相信您有n>=4,所以它试图通过inputaray[j]调用访问inputaray[3]。这就是为什么你得到这个超出界限的错误。


  • 我认为您的代码的意思是:嵌套循环在运行外部循环之前总是先运行内部循环。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       public static void findMissingNum(int n, int[] inputArray){
            for (int i = 1; i <= n; i++){
                int count = 0;
                for( int j = 0; j < inputArray.length; j++){
                    if(inputArray[j] == i){
                        count ++;
                    }
                    if (count == 0){
                        System.out.println(i);
                    }
                }
            }  
        }

    我只使用while循环:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    int num =1;
    while(num<=n){
        for(int i = 0;i<inputArray.length;i++){
            if(inputArray[i]!=num){
                System.out.println(num);
            }
        }
        num++;
    }


  • i递增到<= ipnutArray.length不会导致错误,因为i从未用作索引。导致该错误的原因是当n>length时。

  • 另外,不应该从一开始就检查n元素,因为n是最大值,而不是元素数。