嗨,我遇到了问题并解决了,但我不知道原因:
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
int i = 4;
double d = 4.0;
String s = "Hello ";
Scanner scan = new Scanner(System.in);
int a;
String c;
a= scan.nextInt();
scan.nextLine();
c = scan.nextLine();
System.out.println(i + a);
System.out.println(s + c);
scan.close();
}
}
input:
4
World! How are you!!
当我在scan.nextLine();
之前删除行c = scan.nextLine();
时,我收到错误消息。有谁能告诉我原因。
我用过:
String a;
String c;
a = scan.nextLine();
int b = Integer.parseInt(a);
c = scan.nextLine();
System.out.println(i + a);
System.out.println(s + c);
但得到答案为:
44
Hello World! How are you
答案 0 :(得分:0)
scan.nextLine正在读取回车键。
没有它,c被设置为回车键,程序就完成了。
public static void main(String[] args){
int i = 4;
String s = "Hello ";
Scanner scan = new Scanner(System.in);
int a;
String c;
a = Integer.parseInt(scan.nextLine());
c = scan.nextLine();
System.out.println(i + a);
System.out.println(s + c);
scan.close();
}
输入“4”和Doug的输出是:
8
Hello Doug
答案 1 :(得分:0)
原始代码的问题
scan.nextLine();
a = Integer.parseInt(scan.nextLine());
c = scan.nextLine();
System.out.println(i + a);
System.out.println(s + c);
是第一行。你必须丢弃第一行输入。
考虑您的输入
4
你好吗
第一行是您的第一行
scan.nextLine();
因此,第一行
4
被丢弃。
然后,下一行代码是
a = Integer.parseInt(scan.nextLine());
首先执行scan.nextLine()
。这将读取您的第二行
你好吗
并尝试使用Integer.parseInt()
将其转换为数字,但会因您的例外而失败。
在你的解决方案中
a= scan.nextInt();
scan.nextLine();
c = scan.nextLine();
第二行是必要的,因为scan.nextInt
不会删除换行符。
再次考虑输入
4
你好吗
第一行a = scan.nextInt();
读取
4
且只有4
,将输入保留为
你好吗
如果您现在直接执行c = scan.nextLine();
,c
将被分配空字符串,这仍然是第一行。
因此,第二行删除空行,并将输入保留为
现在可以使用你好吗
c = scan.nextLine();
读取以获取所需的字符串。
如果您有更多问题,请尝试通过调试器和手动模拟执行代码,甚至可能在纸上。这有助于您了解实际发生的情况。
答案 2 :(得分:-1)
如果删除行scan.nextLine();
,则表示您在一行中输入两个数据(变量a和c)。编译器很难决定哪一个应该被解决。但是如果添加行scan.nextLine();
,两个输入将被编译在不同的行中并且可以。