簡體   English   中英

無法使用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()
    }

社交網絡是我在另一個程序中創建的修改后的數組類。 但是這些部分沒有按照我的意願注冊。 而不是將其保存為[Henry, Lily, Victor]而是保存了[Henry, Lily, R, Victor]

您永遠不會退出while(sc.hasNext())內部循環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亨利莉莉R維克多M

輸出-成員是:: Henry Lily Victor

希望對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM