java.util.Scanner.nextInt(未知来源)失败

java.util.Scanner.nextInt(Unknown Source) failing

我一直在尝试获取一个整数数组,但一直失败。我试图在数组中找到缺失的元素。这是我的代码。我在这里做错了什么?

import java.util.Scanner;
public class GFG {

    public static void main(String[] args) {
        int T,N,i,j=0,k=1;
        int C[]= new int[100];
        Scanner sc=new Scanner(System.in);
        T=sc.nextInt();
        for(i=0;i<T;i++)
        {
            N=sc.nextInt();
            for(j=0;j<N;j++)
            {
                C[j]=sc.nextInt();

            }
            while(k<=N)
            {
                if(k==C[j])
                {
                    k++;
                    j++;

                }
                else
                {
                    System.out.println(k);
                    k++;
                    j++;
                }
            }
        }
        sc.close();

    }

}

我试图在一个由连续自然数组成的整数数组中找到缺失的元素
输入:

1                //test cases
4               //array length              
1 2 3 5        // array elements               

期望的输出:

4    

但是输出是

1  
2   
3   
4   

比较未执行。为什么?

在我的计算机上,根据您提到的输入,程序打印从 1 到 96 的数字,然后在 if(k==C[j]).

行崩溃并显示 java.lang.ArrayIndexOutOfBoundsException: 100

您的代码存在许多潜在问题。我只提两个,留给你自己看看是否能找到更多。

  1. 循环后 for(j=0;j<N;j++) j 等于 N(在本例中为 4)。您需要在下一次循环之前将其重置为 0。
  2. k 永远不会变为 0,因此您的循环 while(k!=0) 永远运行,或者更准确地说,它超出了数组的边界,这会在您尝试访问数组元素时导致崩溃在索引 100 处(如您所知,索引为 0 到 99)。您需要另一种方法来停止循环。