在java中数组的默认值是0,为什么在我从用户那里获取数组的大小时,它没有被打印到我的代码中

vnjpjtjt  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(131)

我有下面的代码,其中我采取“n”作为数组的大小从用户,为测试目的,我只提供了很少的输入,即n-1输入到程序。我的理解是,程序应该采取n个值从用户和第(n-1)个值,它应该打印零,因为我没有提供任何值,但它抛出了一个错误。
我是一个完全的初学者,因此,任何帮助都将非常感谢。:)
代码:-

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] arr=new int[n];
        for(int i=0;i<n;i++){
            
            arr[i]=sc.nextInt();
        }
        
        for( int i=0; i<n;i++){
            System.out.println(arr[i]);
        }
    }
}
Input Provided:- 
4
1
4
2

Expected output:
1
4
2
0

Actual Output:-



Output
[NonZeroExitCode] Your code encountered a runtime error
Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at Main.main(Main.java:11)
fhity93d

fhity93d1#

Scanner.nextInt()将爆炸,如果没有整数准备从控制台读取。
为了获得你想要的行为,你应该在尝试读取它之前检查是否有一个整数准备好读取,如果没有一个准备好读取,就停止阅读。
为此,请替换以下内容:

for (int i = 0; i < n; i++) {
    arr[i] = sc.nextInt();
}

int count = 0;
while (sc.hasNextInt()) {
    arr[count++] = sc.nextInt();
}

请参见生成所需输出的live demo

相关问题