程序使用类输入2D数组Scanner
但输出显示:
Runtime error:
NZEC
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 Wocode.main(Main.java:9)
代码片段:
import java.lang.*;
import java.util.*;
import java.util.Scanner;
class Wocode {
public static void main(String args[]) {
Scanner s=new Scanner(System.in);
int m=s.nextInt();
int n=s.nextInt();
int A[][] = new int[m][n];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
A[i][j]=s.nextInt();
}
}
}
}
不要使用 nextInt()
,因为它不会清理缓冲区中的行。因此,用户输入的更好方法是使用 s.nextLine()
.要采用整数输入,请执行
Integer.parseInt(s.nextLine())
当您使用 nextInt()
时,它会接受输入,但输入后的行仍然存在于缓冲区中,当另一个nextInt()
查找输入时,您会得到异常。
我同意cricket_007。在调用 s.next(( 之前需要检查 hasNext(( 方法,如下所示。<if(s.hasNextInt()){
A[i][j]= s.nextInt();
}
>
与其调用 hasNextInt,不如使用阻塞 readLine 调用并转换为整数。
int n = Integer.parseInt(s.nextLine());
你的代码有一些错误。
这是一个序列,如何解决它们:
- 你必须告诉用户程序到底期望什么作为输入
- 验证用户输入的值是否正确
- 解析输入的值
- 使用该值
你没有做一些步骤。因此,您的解决方案甚至不会执行。
以下是一些适合所有步骤的代码片段:
class Wocode {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
System.out.print("Please enter two numbers (separated by space): ");
if (scanner.hasNext()) {
String[] input = scanner.nextLine().split(" ");
if (input.length == 2) {
int firstNumber = Integer.valueOf(input[0]);
int secondNumber = Integer.valueOf(input[1]);
int arr[][] = new int[firstNumber][secondNumber];
for (int rows = 0; rows < firstNumber; rows++) {
for (int columns = 0; columns < secondNumber; columns++) {
arr[rows][columns] = firstNumber + secondNumber;
System.out.print(String.format("%4s", arr[rows][columns]));
}
System.out.println();
}
} else {
System.err.println("You have to enter two digits, separated by space!");
}
}
}
}
输出:
Please enter two numbers (separated by space): 3 5
8 8 8 8 8
8 8 8 8 8
8 8 8 8 8
有用的链接:
- 如何使用扫描仪读取字符串
- 如何使用 Java 中的 Scanner 类从控制台读取输入?