Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java while循环读取字符串时出现问题_Java_String_List_While Loop - Fatal编程技术网

Java while循环读取字符串时出现问题

Java while循环读取字符串时出现问题,java,string,list,while-loop,Java,String,List,While Loop,我正在尝试读取不同的名称和乐器,直到达到程序中前面列出的乐队成员总数为止。程序读取金额,并读取名字。然而,在这之后,它失败了,因为它只读取第一个名字,而不打印后面的任何名字或文书。 下面的while循环是最可能的问题源: i = counter while(i <= bandMembers) { System.out.println("What is band member " + i + "'s name?"); kb.nextLine();

我正在尝试读取不同的名称和乐器,直到达到程序中前面列出的乐队成员总数为止。程序读取金额,并读取名字。然而,在这之后,它失败了,因为它只读取第一个名字,而不打印后面的任何名字或文书。 下面的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++;
    }
感谢您的帮助。

您应该使用

String bName = kb.next(); 
假设您使用的是扫描仪


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

我没有足够的代表对您遇到的问题发表评论:
起初我使用的是kb.next,但它读取每个单词,每个单词之间用空格隔开,作为下一个名称。例如,我输入Jimmy loose hands,它会提示正确输入Jimmy的乐器,但它会询问乐队成员2的姓名以及loose演奏的乐器是什么?同时所以它把第二个单词作为下一个名字

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

使用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++;
}

你为什么叫kb.nextLine;然后字符串…=kb1.nextLine;?那两台扫描仪不同吗?如果是,您只需要字符串…=kb1.nextLine;。我唯一能看到的是你没有为它输入数据。好主意。这样你就可以避免乐队名称中有空格。。。如果正确使用nextLine,也就是说,不要将其与nextLine等混合使用,nextLine也没有问题。起初我使用的是kb.next,但它读取每个单词,每个单词之间用空格隔开,作为下一个名称。例如,我输入Jimmy loose hands,它会提示正确输入Jimmy的乐器,但它会询问乐队成员2的姓名以及loose演奏的乐器是什么?同时所以它把第二个单词作为下一个名字
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++;
}