不能用hasNext打破循环

时间:2015-02-15 15:37:12

标签: java arrays while-loop

输入:

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]

2 个答案:

答案 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

希望它会对你有所帮助。