这个问题在这里已有答案:
所以我有以下输入:
3
3.0
How are you doing
我需要将它们存储到以下变量中:
int myInt
double myDouble
String myString
这是我尝试过的:
myInt = scan.nextInt();
myDouble = scan.nextDouble();
myString = scan.nextLine();
这适用于整数和Double
值,但String
给了我一个NULL值。
然后我尝试了这个:
myInt = scan.nextInt();
myDouble = scan.nextDouble();
myString = scan.next();
它再次适用于前两个,但字符串只保留第一个字。我怎样才能读完整个字符串?我需要设置循环吗?
nextLine()
有点令人困惑。它没有给你下一行,但会读到它遇到的下一个换行符。
在调用nextDouble()之后,扫描仪位于3.0
之后但在新行之前,因此nextLine()
读取到该行的末尾并给出一个空结果。
您可以使用skip(String)
在3.0
之后跳过换行符,或者只是调用nextLine()
一次并扔掉它:
myInt = scan.nextInt();
myDouble = scan.nextDouble();
scan.nextLine(); // Skip the remainder of the double line
myString = scan.nextLine();
myInt = scan.nextInt();
myDouble = scan.nextDouble();
而不是使用scanner
给你double and int
使用nextLine()
并手动投射。 scanner
不会进入问题的下一行。
myInt = Integer.parseInt(scan.nextLine());
myDouble = Double.parseDouble(scan.nextLine());
myString = scan.nextLine();
当您调用nextDouble方法时,它会读取一个double值并相应地前进扫描仪。因此,当您调用nextDouble时,您的扫描仪将在值3.0之后但在下一行字符之前。现在,当你调用nextLine()方法时,它会使扫描程序前进,直到它到达下一个下一行字符并返回进行推进时读取的内容。由于您的扫描仪正好位于下一行字符之前,因此当您调用nextLine()方法时,扫描程序会立即触及下一行字符而不会读取任何内容。因此,您的nextLine()方法返回null。
如果您的输入值在每行中,您可以遵循@Priyamal的建议,或者您可以在myString = scan.nextLine()之前再插入一个nextLine()方法调用。因此,获取输入的代码如下所示:
myInt = scan.nextInt();
myDouble = scan.nextDouble();
scan.nextLine();
myString = scan.nextLine();