2012-10-26 69 views
3

我有一個for循環,要求用戶輸入一個數字,然後做一些事情與它10倍重新啓動當前迭代的for循環的Java

我想建一個檢查,如果用戶輸入一個未接受的輸入,循環應該重新開始其當前迭代

例如,如果用戶在第3輪輸入錯誤,第3輪應該重新啓動。

我該怎麼做?有沒有像java中的REDO語句?

+1

好的,你試過了嗎? – kosa

+7

你和[這傢伙]去了同一所學校嗎?(http://stackoverflow.com/questions/13066736)? –

+0

使用'do-while'循環,而不是'for'循環。 –

回答

7

這樣的事情?

for(int i=0; i<10; i++){ 
    if(input wrong){ 
    i=i-1; 
    } 

} 
+0

這就是我所做的,只是想知道是否有更優雅的方式。 – Killerpixler

+0

@Killerpixler是的,使用「do-while」循環而不是減少「i」值。 –

+0

我認爲改變循環內循環控制變量的值往往會令人困惑。在這種情況下足夠簡單,但在一個很大的循環中,它可能是不明顯的。我更喜歡@ Mik378發佈的答案:使用內部循環重新提示輸入,直到收到有效輸入。 –

4

這裏有幾個選擇。

繼續繼續在Java中語句告訴循環回到它的起點。如果你使用一個for循環,但是,這將持續到下一次迭代這可能不是你想要的,所以這個工作得更好while循環實現:

int successfulTries = 0; 
while(successfulTries < 10) 
{ 
    String s = getUserInput(); 
    if(isInvalid(s)) 
     continue; 

    successfulTries++; 
} 

遞減 這種方法看起來對我來說很難看,但如果你想用for循環完成你的任務,你可以在檢測到錯誤的輸入時減少for循環中的計數器(本質上是'重做')。

for(int i = 0; i < 10; i++) 
{ 
    String s = getUserInput(); 
    if(isInvalid(s)) 
    { 
     i--; 
     continue; 
    } 
} 

我建議你使用while循環。

3

想要避免重新指定i變量,這可能會導致混淆。

for(int i=0; i<10; i++){ 
     String command = null; 
     do{ 
     command = takeCommandFromInput(); 
     } while(isNotValid(command)); 
     process(command); 
    }