为了账号安全,请及时绑定邮箱和手机立即绑定

使用scanner.nextLine()

使用scanner.nextLine()

慕尼黑的夜晚无繁华 2019-06-19 16:20:28
使用scanner.nextLine()在尝试使用java.utils.caner的nextLine()方法时,我遇到了麻烦。以下是我尝试过的:import java.util.Scanner;class TestRevised {     public void menu() {         Scanner scanner = new Scanner(System.in);         System.out.print("Enter a sentence:\t");         String sentence = scanner.nextLine();         System.out.print("Enter an index:\t");         int index = scanner.nextInt();         System.out.println("\nYour sentence:\t" + sentence);         System.out.println("Your index:\t" + index);     }}例1:此示例按预期工作。线String sentence = scanner.nextLine();等待输入,然后继续到System.out.print("Enter an index:\t");.这将产生输出:Enter a sentence:   Hello.Enter an index: 0Your sentence:  Hello.Your index: 0// Example #2import java.util.Scanner;class Test {     public void menu() {         Scanner scanner = new Scanner(System.in);         while (true) {             System.out.println("\nMenu Options\n");             System.out.println("(1) - do this");             System.out.println("(2) - quit");             System.out.print("Please enter your selection:\t");             int selection = scanner.nextInt();             if (selection == 1) {                 System.out.print("Enter a sentence:\t");                 String sentence = scanner.nextLine();                 System.out.print("Enter an index:\t");                 int index = scanner.nextInt();                 System.out.println("\nYour sentence:\t" + sentence);                 System.out.println("Your index:\t" + index);             }             else if (selection == 2) {                 break;             }         }     }}例2:此示例不按预期工作。此示例使用WHITH循环和if-Other结构来允许用户选择要执行的操作。一旦程序到达String sentence = scanner.nextLine();,它不等待输入,而是执行。System.out.print("Enter an index:\t");.这将产生输出:Menu Options(1) - do this(2) - quitPlease enter your selection:    1Enter a sentence:   Enter an index:这使得不可能输入一个句子。为什么示例2不按预期工作?唯一的区别是。1和2是那个Ex。2有一个WITH循环和一个if-Other结构。我不明白为什么这会影响scanner.nextInt()的行为。
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

我觉得你的问题是

int selection = scanner.nextInt();

只读取数字,而不是行尾或数字之后的任何内容。当你宣布

String sentence = scanner.nextLine();

这将读取行的其余部分和上面的数字(在我怀疑的数字之后没有任何内容)。

如果您想忽略行的其余部分,尝试在每个nextInt()之后放置scanner.nextLine();。


查看完整回答
反对 回复 2019-06-19
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

因为当你输入一个数字然后按回车,input.nextInt()只消耗数字,而不是“行尾”。原始数据类型(如int、Double等)不使用“行尾”,因此“行尾”保留在缓冲区中,并且当input.next()执行时,它从第一个输入中消耗缓冲区中的“行尾”。所以,你的String sentence = scanner.next()只消耗“行尾”,不等待从键盘读取。

提示:使用scanner.nextLine()而不是scanner.next()因为scanner.next()不从键盘读取空格。(在键盘上给出一些空格后,截断字符串,只在空格之前显示字符串。)


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 811 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信