2011-09-16 66 views
0

我試圖使用字符串輸入(是或否)作爲循環的標記。該循環重複一個switch語句,並在最後提示用戶是否有問題。直到他們輸入「是」作爲他們的答案,循環才繼續接收來自用戶的數據。問題來自嘗試接收哨兵的新值。在java中更改字符串變量的輸入

***評論了評論並做了一些更改。這裏的更新代碼:

Scanner input = new Scanner (System.in); 

    System.out.print("Please enter a product number, 1 - 5: "); 
    int product = input.nextInt(); 
    double sum = 0; 
    boolean complete = false; 

    while (!complete) { 

    switch (product){ 
     case 1: sum = sum + 2.98; 
     break; 
     case 2: sum = sum + 4.50; 
     break; 
     case 3: sum = sum + 9.98; 
     break; 
     case 4: sum = sum + 4.49; 
     break; 
     case 5: sum = sum + 6.87; 
     break; 
    } 
    System.out.print("Is your order complete? Please type true or false:"); 
    complete = in.nextLine(); 
    } 

所有這一切都工作,但我仍然有麻煩提示打破哨兵。我試圖讓它設置爲用戶鍵入true結束循環或false以繼續它。我開始認爲我忽略了一些東西。我非常感謝幫助,謝謝。

+0

這是否甚至編譯?它看起來好像complete是一個String,並且你不能有一個while(!)。這是不允許的。 –

回答

2

變化

default: String complete = input.Stream(); //Not coded, but will also ask for input. 

default: complete = input.Stream(); //Not coded, but will also ask for input. 

你重新聲明一個String,這是不是你想要的。並按照給出的建議使用.equals,而不是==的字符串或其他參考類型。

0

由於您聲明瞭兩次,所以很抱歉。取下第二個String聲明:

default: complete = input.Stream(); //Not coded, but will also ask for input. 
0

您聲明完成兩次。嘗試修改默認的情況下語句:

默認:完整= input.Stream()

0

兩件事情:

1)你重新聲明完整。默認情況下應該是:

default: complete = input.Stream(); 

2)在Java中,您無法將字符串與!=進行比較。每個字符串都是一個對象,通過使用比較運算符,您可以比較對象的標識符,而不是對象的內容。 Java永遠不會看到兩個String對象是平等的,除非它們是指向同一個內存位置的兩個字符串。要比較兩個字符串的值,你必須使用.equals()方法,如:

while (!complete.equals("yes")) { 

甚至更​​好的習慣:

while (!"yes".equals(complete)) { 

這是更好,因爲如果完整的字符串變量爲空,那麼第一次比較會拋出一個空指針異常,其中第二次不會,因爲文字字符串「是」將始終計算爲非空對象。

希望有所幫助。

大衛