2014-01-16 58 views
0

Java新手在這裏, 我試圖編寫一個oracle機器,它的工作。但是,詢問用戶是否要繼續的最後部分不起作用。我會詢問用戶是否要繼續,如果他們沒有回覆「Y」,「Y」,「N」或「n」,他們將不得不再次重新運行測試。 讓我得到這個問題是這樣的:我在'Do'循環中做了什麼錯誤?

What is the question that you want to ask?... agafds 
    No! And Stop asking me! 
    Continue asking?(Y/N)...Y 
    Continue asking?(Y/N)...Y 
    Continue asking?(Y/N)...Y 
    Continue asking?(Y/N)...Y 
    Continue asking?(Y/N)...Y 

從這:

import java.util.Scanner; 
import java.util.Random; 
import static java.lang.System.out; 

public class firstClass { 
public static void main(String args[]) { 


    Scanner kbScanner=new Scanner(System.in); 
    Random intRand=new Random(); 
    String yOn; 

    do { 
     int oneten; 
     out.print("What is the question that you want to ask?... "); 
     kbScanner.nextLine(); 
     oneten=intRand.nextInt(10)+1; 

     switch (oneten) { 
     case 1 : 
      out.println("Not a chance, buster."); 
      break; 
     case 2 : 
      out.println("Get a life man!"); 
      break; 
     case 3 : 
      out.println("Why are you even asking me this?!"); 
      break; 
     case 4 : 
      out.println("Depends on your thinking."); 
      break; 
     case 5 : 
      out.println("What are you seeking for?"); 
      break; 
     case 6 : 
      out.println("Maybe... But don't trust me..."); 
      break; 
     case 7 : 
      out.println("Do I look like I care?"); 
      break; 
     case 8 : 
      out.println("Why would you even ask that?"); 
      break; 
     case 9 : 
      out.println("The chances are as thin as searching for a needle in a haystack."); 
      break; 
     case 10 : 
      out.println("No! And Stop asking me!"); 
      break; 
     } 
     do{ 
      out.print("Continue asking?(Y/N)..."); 
      yOn=kbScanner.nextLine(); 
     }while (!yOn.equals("Y")||!yOn.equals("y")||!yOn.equals("N")||!yOn.equals("n")); 
     out.println("Continuing"); 
    }while (yOn.equals("Y")||yOn.equals("y")); 

} 
} 

所以說:問題是,不管用戶輸入那裏似乎沒有什麼區別。

+0

擺脫內部的do-while循環。 – aquaraga

+0

嘗試使用無限循環。 'while(true)' – kurumi

+0

檢查輸入'Y'時'yOn' *真* *的值。它可能會附加cr + lf。 –

回答

1

在你的情況下,內循環應該是這樣的我想:

do{ 
    out.print("Continue asking?(Y/N)..."); 
    yOn=kbScanner.nextLine(); 
}while (!yOn.equals("Y")&&!yOn.equals("y")&&!yOn.equals("N")&&!yOn.equals("n")); 
0

切換開關後,別再有do..while循環。只保留外環:

//do{ 
     out.print("Continue asking?(Y/N)..."); 
     yOn=kbScanner.nextLine(); 
    // }while (!yOn.equals("Y")||!yOn.equals("y")||!yOn.equals("N")||!yOn.equals("n")); 
    // out.println("Continuing"); 
//Retain the outer do..while condition 
}while (yOn.equals("Y")||yOn.equals("y")); 
3
!yOn.equals("Y")||!yOn.equals("y")||!yOn.equals("N")||!yOn.equals("n") 

這種情況總是會評估爲true,如果它的Y超過了它的不爲N所以它仍然是真實的,反之亦然。將您的||更改爲&&

!yOn.equals("Y")&&!yOn.equals("y")&&!yOn.equals("N")&&!yOn.equals("n") 
+0

我認爲它就像'yOn.equals(「Y」)|| yOn.equals(「y」)|| yOn.equals(「N」)|| yOn.equals(「n」)' –

+0

這是邏輯上相當並可能是更好的解決方案,但無論哪種方式 –

+0

如果整個術語被否定(當然是http://en.wikipedia.org/wiki/De_Morgan%27s_laws),這是等價的。 –

0

試試這個更換一次,同時通過

while (!(yOn.equals("Y")||yOn.equals("y")||yOn.equals("N")||yOn.equals("n")));

0

循環,使一些提示,你

1 - 使用equalsIgnoreCase而不是equals("Y")||!yOn.equals("y") 2 - 刪除中間while你的邏輯應該像下面這樣w^

main {  
    read option 

    do { 
     process 
     read option 
    } while (continue ?) // validate here 
} 
+0

謝謝。我發現它很有用。 –

+0

@ MK_10110不客氣。 Upvote? –

+0

對不起,我沒有足夠的聲望:(但無論如何感謝:) –

0

嘗試更換

do{ 
      out.print("Continue asking?(Y/N)..."); 
      yOn=kbScanner.nextLine(); 
     }while (!yOn.equals("Y")&&!yOn.equals("y")&&!yOn.equals("N")&&!yOn.equals("n")); 
     out.println("Continuing"); 

通過

out.print("Continue asking?(Y/N)..."); 
yOn=kbScanner.nextLine(); 

你真的不需要內do-while循環的外循環可以做同樣的事情你。

嘗試thisthis查看嵌套循環何時真正有用。

+0

是的,這是真的,但我需要正確的用戶輸入。例如,如果用戶輸入「x」而不是y或n,程序將自動退出。或者,也許我沒有看清楚你的觀點。 –