无法使用 hasNext 跳出循环

Cannot break out of loop with hasNext

输入:

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()
    }

社交网络是我在另一个程序中修改的数组class。但是这些部分没有按照我的意愿注册。它没有将其保存为 [Henry, Lily, Victor],而是保存了 [Henry, Lily, R, Victor]

您永远不会退出内部循环 while(sc.hasNext()),而且即使您愿意,您也永远不会取回第一个 while(sc.hasNext()) 中的代码,因此只会读取第一个代码,其他所有代码都会被读取被注册。您可能没有尝试 M 选项,因为使用它也不起作用,只需注册 M。让我相信您还没有尝试过的另一件事是您使用 socialNetwork.toString() 输出最终数组,这将输出对象的内存地址。在这里,我修改了您的算法以满足您的需求:

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
    }
}

据我了解,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

希望对您有所帮助。