所以我有以下输入:
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();
它再次适用于前两个,但字符串只保留第一个单词。我怎样才能读完整个字符串?我需要设置循环吗?
答案 0 :(得分:8)
nextLine()
有点令人困惑。它不会提供 next 行,但会在它遇到的下一个换行符之前读取。
在您调用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();
答案 1 :(得分:0)
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();
答案 2 :(得分:0)
当您调用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();