【问题标题】:java.util.Scanner.nextInt(Unknown Source) failingjava.util.Scanner.nextInt(未知来源)失败
【发布时间】:2018-04-21 11:39:49
【问题描述】:

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

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   

比较未执行。为什么?

【问题讨论】:

  • 它究竟是如何不断失败的?如果您遇到错误/异常,您需要告诉我们它是什么并显示堆栈跟踪。
  • 让我猜,你可能想删除 System.in 周围的引号。
  • 比较if(k==C[j])没有任何意义。 C 是一个双精度数组,但 k 是一个 int。我不确定您要做什么。但这可能不是正确的方法。
  • 除了stacktrace之外,还请指出stacktriace表示异常来自代码中的哪一行。
  • 去掉双引号后程序运行无误

标签: java comparison output comparison-operators


【解决方案1】:

在我的计算机上,使用您提到的输入,程序会打印从 1 到 96 的数字,然后在 if(k==C[j]) 行出现 java.lang.ArrayIndexOutOfBoundsException: 100 崩溃。

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

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

【讨论】:

  • 感谢您的回答得到了所需的输出。
猜你喜欢
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 2015-01-14
相关资源
最近更新 更多