[英]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.