4

我在返回用户输入字符串时遇到了困难。如果我有代码:

System.out.println("please enter a digit: ");
number1 = in.nextInt();
System.out.println("enter another digit: ");
number2 = in.nextInt();
System.out.println("enter a string: ");
string = in.nextLine();
//calculations

System.out.println(number1);
System.out.println(number2);
System.out.println(string);

它打印出数字而不是字符串。我觉得解决方案很简单,但我现在脑子里放了个屁。任何帮助,将不胜感激!

4

4 回答 4

8

in.nextLine()在调用in.nextLine()读取字符串之前,您需要调用一个额外的。它是消耗额外的换行符。

至于解释,让我们以这个输入为例:

23[Enter]
43[Enter]
Somestring[Enter]

(23 和 43 可以是任意数字,重要的是换行

您需要调用in.nextLine()以使用上一个新行in.nextInt(),特别是上面示例中的新行字符43

nextInt()将消耗尽可能多的数字并在下一个字符是非数字时停止,因此新行就在那里。nextLine()将读取所有内容,直到遇到新行。这就是为什么您需要额外的内容nextLine()来删除 之后的新行43,以便您可以继续阅读Somestring下一行的内容。

例如,如果您的输入是这样的:

23 43 Somestring[Enter]

您不按 Enter 并继续键入,然后您当前的代码将显示字符串(将是 Somestring,注意空格),因为在 之后没有新行阻碍43

于 2012-09-23T14:46:20.243 回答
4

线

int number2 = in.nextInt();

将字符串传递给语句

string = in.nextLine();

当您键入数字并按 ENTER 键时。Scanner.nextLine()在尝试读取另一个字符串之前使用此字符串将解决问题:

...
number2 = in.nextInt();
in.nextLine();
System.out.println("enter a string: ");
string = in.nextLine();
...
于 2012-09-23T14:45:38.763 回答
1

在您的情况下in.next(),如果两者之间没有空格,则足以读取字符串。

于 2012-09-23T14:50:32.147 回答
1

字符串 xxx;

扫描仪编号 1 = 新扫描仪(System.in)

xxx = number1.nextLine();

于 2012-09-23T14:51:22.407 回答