Java 数组中缺少整数的嵌套循环

Java 数组中缺少整数的嵌套循环,java,arrays,for-loop,nested,Java,Arrays,For Loop,Nested,我是初学者。我在运行这一系列for循环以查找数组中缺少哪些整数时遇到问题 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(

我是初学者。我在运行这一系列for循环以查找数组中缺少哪些整数时遇到问题

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);
                }
            }
        }   
    }
}
当程序作为数组的最大值运行时,该方法应从用户处获取一个输入n,并打印所有缺少的值 逻辑是外部for循环应该遍历数字1-n的数组,而内部循环应该在每次找到某个数字时添加到count变量。在迭代结束时,它应该打印最终计数为0的任何数字。这简直快把我逼疯了!!!提前感谢:

首先,您应该从0遍历到inputArray.length-1索引。这将消除ArrayIndexOutOfBoundsException,因为java数组索引从0开始,而不是从1开始

对于内部循环,从0运行到n,因为n是最大值

第三,它应该是inputArray[i]==j,而不是inputArray[j]==i,与打印值相同。在您的例子中,我相信您的n>=4,所以它试图通过inputArray[j]调用访问inputArray[3]。这就是为什么会出现这种越界错误

i逐渐增加到长度

此外,您不应该从头开始检查n个元素,因为n是最大值,而不是元素数


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

   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循环:

int num =1;
while(num<=n){
    for(int i = 0;i<inputArray.length;i++){
        if(inputArray[i]!=num){
            System.out.println(num);
        }
    }
    num++;
}

请格式化您的代码。它确实很难阅读,你的问题在于:inti=1;i@JorgeCampos没有这种访问尝试。问题是假设n操作。。。没有看到代码的其余部分xD my bad…可能的重复应该遍历0到inputArray.length,除非有理由不关心最后一个元素。字符串[5];长度=5;元素0…4;将0循环到int num =1; while(num<=n){ for(int i = 0;i<inputArray.length;i++){ if(inputArray[i]!=num){ System.out.println(num); } } num++; }