2012-11-21 98 views
2

我試圖寫下面的代碼來允許連續投擲硬幣並在輸入E時退出。不確定如果do-while循環是連續執行的正確方法,或者我應該使用其他方法。退出在java中輸入字符串的do-while循環

do { 
    guess = sc.next(); 
    tossGenerator(guess); 
    }while(!guess.equals("E")||!guess.equals("e")); 

所以,我才短語的代碼錯誤,因爲我不能走出循環做的或應採用不同的方法。請幫忙。謝謝。

+3

退房[德摩根定律(http://en.wikipedia.org/wiki/De_Morgan%27s_laws ) - 它有助於多重否定等。 – dasblinkenlight

回答

8

變化&&||

} while (!guess.equals("E") && !guess.equals("e")); 

或重新安排這樣的:

} while (!(guess.equals("E") || guess.equals("e"))); 

或者您可以使用String.equalsIgnoreCase()並消除conjunction

} while (!guess.equalsIgnoreCase("e")); 
+1

這需要'guess'在循環之前被初始化,這可能是對代碼的額外改變。 – chepner

2

退出條件應與AN一起d操作:

!guess.equals("E") && !guess.equals("e") 

否則任何"E""e",因爲如果它的「E」那就不是「E」,反之亦然會使平凡真實其中至少一個。

3

將其更改爲

while(!guess.equalsIgnoreCase("E")); 
1

一個問題與您的代碼是,它會調用tossGenerator(guess)即使guess是「E」。另一個是guess總是不會是「e」或不是「E」(它不能同時)。我會寫這樣的:

guess = sc.next(); 
while (!"e".equalsIgnoreCase(guess)) { 
    tossGenerator(guess); 
    guess = sc.next(); 
} 

或者,使用for循環:

for (guess = sc.next(); !"e".equalsIgnoreCase(guess); guess = sc.next()) { 
    tossGenerator(guess); 
}