输入:
R Henry Lily
R Victor
M
期望的输出:
The members are Henry, Lily, Victor
我的代码是:
code = sc.next();
while (sc.hasNext()) {
if (code.equals("R")) {
while(sc.hasNext()) {
socialNetwork.registerUser(sc.next());
}
else if (code.equals("M"))
System.out.print("The members are " + socialNetwork.toString());
code = sc.next()
}
社交网络是我在另一个程序中创建的修改过的数组类。但是这些部分没有按我的意愿注册。而不是将其保存为[Henry, Lily, Victor]
,而是保存[Henry, Lily, R, Victor]
。
答案 0 :(得分:1)
你永远不会退出内循环while(sc.hasNext())
,即使你愿意,你也永远不会在第一个while(sc.hasNext())
中找回代码,因此只读取第一个代码而所有其他代码都将被注册。您可能没有尝试M
选项,因为使用它也不起作用,只需注册M
即可。让我相信你没有尝试过的另一件事是你使用socialNetwork.toString()
输出最终数组,它将输出Object的内存地址。在这里,我修改了您的算法以满足您的需求:
Scanner sc = new Scanner(System.in);
String code;
String tmpLine;
while (sc.hasNext()) {
code = sc.next();//retrieve the code
if (code.equals("R")) {
tmpLine = sc.nextLine().trim();//read the entire rest of the line
for(String s : tmpLine.split(" "))// split words by space
socialNetwork.registerUser(s);
}
else if (code.equals("M"))
{
System.out.print("The members are " + String.join(",", socialNetwork));//notice that I use String.join instead of toString
}
}
答案 1 :(得分:0)
据我所知,hasNext()
用于遍历数据列表,它将检查列表中是否还有更多数据。在你的情况下,突破hasNext()
循环内的数据是完全不同的。我可以建议正确执行你的执行逻辑可以完成你的任务。您只需要很少的执行更改就可以获得预期的输出。请检查以下程序,只需对程序进行一些修改。
public static void main(String[] args)throws IOException {
Scanner sc=new Scanner(System.in);
List<String> socialNetwork=new ArrayList<String>();
while(sc.hasNext()){
String code=sc.next();
if(code.equals("R")){
String checkedCode=sc.next();
if(!checkedCode.equals("R")){
socialNetwork.add(checkedCode);
}
}else if(!code.equals("M")){
String checkedCode=code;
if(!checkedCode.equals("R")){
socialNetwork.add(checkedCode);
}
}else{
//If the code is "M"
System.out.print("The members are:: ");
for(int i=0;i<socialNetwork.size();i++){
System.out.print(socialNetwork.get(i)+" ");
}
}
}
}
输入 - R Henry Lily R Victor M
输出 - 成员是:: Henry Lily Victor
希望它会对你有所帮助。