2014-10-04 65 views
1

對於我的科學博覽會項目,我想給一個法語教學程序提供一個圖形更新,這個程序在DosBOX中已經很老了。這一切都很好,但我遇到了問題。我在控制檯應用程序中編寫程序的基本邏輯,只是爲了將它們結合在一起。我創建了一個Question類,它位於數組列表/集合中,名爲「test1」。重複一個循環的增量

我有一個列表並在每次迭代迭代,它運行稱爲另一種方法循環評估:

public static boolean evaluate(Question question, Scanner scanner) 
{ 
    System.out.println(question.getPhrase()); // prints the question 
    String answer = scanner.nextLine(); // gets the answer 
    if (answer.compareTo(question.getCorrectAnswer()) == 0) 
     return true; // compares the answer to the correct answer w/i the current instance of "Question" 
    else 
     return false; // if it's not right, returns "false" meaning the question wasn't correct 
} 

循環看起來這樣:

for (Question question : test1) 
    { 
     if (evaluate(question, scan)) 
      { 
       incorrect = 0; 
       continue; 
      } 

     else 
      { 
       incorrect++; 
       System.out.println(incorrect); 
      } 

     if (incorrect == 3) 
      System.out.println("you have failed"); 
      break; 
    } 

我想讓它所以如果你錯誤地回答了一個問題,它會再次吐出這個短語,並將「不正確」加1,​​如果你打3,就終止列表(我想我已經正確實施了,如果我可以重複它問題)。現在它移動到列表中的下一個項目,因此下一個問題即使我不​​想要。

對不起,如果我的代碼很糟糕,我還是比較新的編程。

+1

您需要的循環中,您已經在另一個內部循環有,重複當前的問題,直到它被正確回答。 – 2014-10-04 17:50:49

回答

0

而不是做一個foreach循環,你現在正在做的方式,你可以做到以下幾點:

for (int i = 0; i < test1.size(); i++) { 
    Question question = test1.get(i); 
    if (evaluate(question, scan)) { 
     ... 
    } else { 
     incorrect++; 
     test1.add(question); 
    } 

    if (incorrect == 3) { ... } 
} 

假設您使用的數據結構使用size()add()作爲方法;你可以調整它到你正在使用的。

這將在稍後重複問題,但不會在緊接着之後。如果你想後,立即重複它,只是遞減i--else情況:

for (int i = 0; i < test1.size(); i++) { 
    Question question = test1.get(i); 
    if (evaluate(question, scan)) { 
     ... 
    } else { 
     incorrect++; 
     i--; 
    } 

    if (incorrect == 3) { ... } 
} 

還可以嵌套爲else情況下一個循環:

for (Question question : test1) { 
    boolean passed = True; 
    incorrect = 0; 
    while (!evaluate(question, scan)) { 
     incorrect++; 
     if (incorrect == 3) { passed = False; break; } 
    } 

    if (!passed) { System.out.println("you have failed"); break; } 
} 
+0

非常感謝!這幫助了很多,解決了我的問題。 :) – JaysusMoon 2014-10-04 20:25:05

1

在for循環內部創建一個while循環,說明如果問題沒有被正確回答,那麼在每個問題中重複這樣的問題直到它的正確值纔會問問題。保持裏面的一切for循環while循環,你應該:

for (Question question : test1) 
{ 
    while(!evaluate(question, scan)) { 
    if (evaluate(question, scan)) 
     { 
      incorrect = 0; 
      continue; 
     } 

    else 
     { 
      incorrect++; 
      System.out.println(incorrect); 
     } 

    if (incorrect == 3) 
     System.out.println("you have failed"); 
     break; 
} 
} 
+0

這並不像我喜歡的那樣工作,但它仍然給我提供了關於將來如何實現類似功能的意見,所以謝謝!我沒有這樣想過。我知道我需要第二個循環,但並不確定要做什麼。 – JaysusMoon 2014-10-04 20:26:09