【问题标题】:Trouble with while loops reading stringswhile循环读取字符串的问题
【发布时间】:2015-01-12 20:10:24
【问题描述】:

我正在尝试读取单独的名称和乐器,直到达到乐队成员的总数(在程序的前面询问)。程序读取金额,并读取名字。然而,在那之后它失败了,它只读取了第一个名字,之后它不打印任何名字或乐器。 下面的 while 循环最有可能是问题的根源:

i = counter
while(i <= bandMembers)
    {
        System.out.println("What is band member " + i + "'s name?");
        kb.nextLine();
        String bName = kb.nextLine();
        System.out.println("What instrument does " + bName + " play?");
        kb.nextLine();
        String bNamePlay = kb1.nextLine();
        list = list + i + ":" + " " + bName + " - " + bNamePlay+ "\n";
        i++;
    }

如果我将名字输入为 bName1,则会打印以下内容:

Band Members
--------------
1: bName1 - 
2:  - 
3:  - 

任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 你为什么先打电话kb.nextLine();然后String ... = kb1.nextLine();?那是两个不同的扫描仪吗?如果是这样,您只需要String ... = kb1.nextLine();。我能看到的唯一情况是你没有为它输入数据。

标签: java string list while-loop


【解决方案1】:

请改用 BufferedReader。这将解决您的问题。:-

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
i=counter;
while(i<=bandMembers){
System.out.println("Enter band member "+i+" name:-");
String bName=br.readLine();
System.out.println("What instrument does "+bName+" play?");
String bNamePlay=br.readLine();
list = list + i + ":" + " " + bName + " - " + bNamePlay+ "\n";
i++;
}

【讨论】:

    【解决方案2】:

    你应该使用

    String bName = kb.next(); 
    

    假设您使用的是扫描仪。

    当您调用 nextLine() 时,它会读取同一行的其余部分并且不等待输入。

    【讨论】:

    • 好主意。这样你就可以避免乐队名称在他们的名字中带有空格......如果你使用得当,nextLine 没有问题(即不要将它与nextInt 左右混合)。
    • 我一开始使用的是 kb.next,但它会将每个以空格分隔的单词读取为下一个名称。例如,我会输入“Jimmy 松手”,它会正确提示 Jimmy 的乐器,但随后会询问乐队成员 2 的姓名和“松手演奏什么乐器?”同时地。所以它把第二个词作为下一个名字
    【解决方案3】:

    我没有足够的代表来评论您遇到的问题: 我一开始使用的是 kb.next,但它会将每个以空格分隔的单词读取为下一个名称。例如,我会输入“Jimmy 松手”,它会正确提示 Jimmy 的乐器,但随后会询问乐队成员 2 的姓名和“松手演奏什么乐器?”同时地。所以它把第二个单词作为下一个名字。

    您可能想要做的是删除“kb.nextLine();”在“字符串 bName = kb.nextLine();”之前 我没有打开 IDE 来确认它,但这可能是它使用输入的第二个单词/字符串作为名称的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 2023-03-14
      • 2011-06-19
      • 2016-02-02
      • 1970-01-01
      相关资源
      最近更新 更多