问题是这样的:
我有两个程序从控制台获取输入,但方式不同: 的 1)
Scanner input = new Scanner(System.in);
int temp1 = input.nextInt();
input.nextLine();
String str = input.nextLine();
int temp2 = Integer.parseInt(str);
int total = temp1+temp2;
System.out.println(total);
2)
Scanner input = new Scanner(System.in);
int temp1 = input.nextInt();
// input.nextLine();
String str = input.nextLine();
int temp2 = Integer.parseInt(str);
int total = temp1+temp2;
System.out.println(total);
在第一种情况下,1输入2个不同的行,如
1
2
所以它给出了正确答案,但在第二种情况下,我删除了input.nextLine()
语句以在一行中输入输入,如:
1 2
它给我数字格式异常为什么?并且还建议我如何从控制台的单行读取整数和字符串。
答案 0 :(得分:1)
假设输入为1 2
,则在此行之后
String str = input.nextLine();
str
等于" 2"
,因此无法将其解析为int。
你可以做到:
int temp1 = input.nextInt();
int temp2 = input.nextInt();
int total = temp1+temp2;
System.out.println(total);
答案 1 :(得分:1)
问题是str
的值为" 2"
,而前导空格不是parseInt()
的合法语法。您需要跳过输入中两个数字之间的空白区域,或者在解析为str
之前修剪int
之外的空白区域。要跳过空格,请执行以下操作:
input.skip("\\s*");
String str = input.nextLine();
要在解析之前修剪str
之外的空格,请执行以下操作:
int temp2 = Integer.parseInt(str.trim());
你也可以一气呵成地阅读这两行:
if (input.findInLine("(\\d+)\\s+(\\d+)") == null) {
// expected pattern was not found
System.out.println("Incorrect input!");
} else {
// expected pattern was found - retrieve and parse the pieces
MatchResult result = input.match();
int temp1 = Integer.parseInt(result.group(1));
int temp2 = Integer.parseInt(result.group(2));
int total = temp1+temp2;
System.out.println(total);
}
答案 2 :(得分:0)
在你的下一行中没有整数...它试图从null创建和整数...因此你得到数字格式异常。如果在temp1上使用split string,则会获得值为1和2的2个字符串。