2017-06-20 41 views
-5
public static void add2q() { 
    System.out.print("Age:"); 
    age = sc.nextInt(); 
    if (!(age >= 3 && age <= 80)) { 
     System.out.println("Sorry you must be between the age of 3 to 80"); 
    } else if (age >= 3 && age <= 5) { 
     while (true) { 
      System.out.println("Need to be accompanied by an adult above 16\nHave an adult to accompany?y/n"); 
      String yn = sc.nextLine(); 
      if (yn.equals("y")) { 
       System.out.print("Child's Name: "); 
       name = sc.nextLine(); 
       names.add(name); 
       price(); 
       addAdult(); 
       break; 
      } else if (yn.equals("n")) { 
       while (true) { 
        System.out.println("Sorry you cannot take this ride"); 
        add2q(); 
        break; 
       } 
      } else { 
       System.out.println("Invalid output"); //funny problem here 
      } 
     } 
    } else { 
     System.out.print("Name: "); 
     name = sc.nextLine(); 
     names.add(name); 
     price(); 
    } 
} 

當用戶輸入3或4或5時,它將打印「需要......」以及「無效的輸出語句」,但我不想要最後的聲明。我如何防止顯示最後一條語句?不需要時打印一個else語句

+0

在「3或4或5」之後鍵入什麼? –

+1

那麼你的代碼在做什麼。如果年齡在(3:5)的範圍內,但下一個輸入('yn')不是「」y「或」n「,它將輸出無效輸出。只是更新你的條件,如果你不想要 – AxelH

+0

假設鍵入y/n,但在我鍵入之前,它會打印「無效的輸入」@Coldspeed –

回答

0

如果使用使用後

age = sc.nextInt();

String yn = sc.nextLine();

YN it's最終行(它的= 「」) 這是更好地利用 age = Integer.parseInt(sc.nextLine())如果您的輸入是每行。

一個例子:

如果輸入是

3 y

在這種情況下

程序打印

"Need to be accompanied by an adult above 16\nHave an adult to accompany?y/n" 

而且打印

"Invalid output" 

這是因爲yn具有「輸入」的值(如所述的Alex)並且在第二次迭代中捕獲值「y」。

+0

多解釋一下。 'nextInt'不消耗掃描器的「輸入」鍵,所以後面的每個'nextLine'都會注意到它,並會讀取它。並且'Integer.parseInt'的使用對輸入錯誤更好,而不是更好的解析內容。 – AxelH

+0

這是對的,這不是解析內容的最好方法。 – Fabian

0
sc.nextInt() 

不會消耗輸入中的新行字符。所以,當你鍵入3並回車你的輸入將是:「3 \ n」,但掃描儀將只在3讀因此,當你調用

sc.nextLine() 

掃描儀將讀取該剩餘換行符這弄亂提出你的意見。您可以解決此通過調用nextLine方法您scanner.nextInt()方法後立即消耗剩餘的換行符像這樣

sc.nextInt(); 
sc.nextLine(); 

也可以按照Fabian的建議,並與SC一起使用的Integer.parseInt() .nextLine()