2017-03-04 174 views
0

這是一個計算器程序。當我這樣寫:忽略字符串輸入

public static void main(String[] args) { 

    Scanner input = new Scanner (System.in); 
    int x1 = input.nextInt(); 
    int x2 = input.nextInt(); 
    String x3 = input.nextLine(); 

    if ("+".equals(x3)){ 
     int r= x1 + x2; 
     System.out.println(r); 
    } else if ("-".equals(x3)) { 
     int r= x1 - x2; 
     System.out.println(r); 
    } else if ("*".equals(x3)) { 
     int r= x1 * x2; 
     System.out.println(r); 
    } else if ("/".equals(x3)) { 
     int r= x1/x2; 
     System.out.println(r); 
    } else if ("%".equals(x3)) { 
     int r= x1 % x2; 
     System.out.println(r); 
    } else { 
     System.out.println("invalid input"); 
    } 
} 

該程序不會等待採取第三個輸入。當我試圖單獨爲第三個輸入創建另一個掃描器對象時,代碼運行良好。 另外,當我試圖切換輸入順序時,我首先輸入字符串,代碼運行良好。 誰能告訴我發生了什麼事?

+0

這是Java嗎?請使用編程語言進行標記。 –

回答

1

我通過添加一個函數將String解析爲int來解決此問題。您需要使用input.nextLine(),將它與您的Scanner一起傳遞給函數,然後使用該值。如果字符串不是數字,它會要求另一個輸入。

private static int parseInt(String s, Scanner input) { 
    try { 
     return Integer.parseInt(s); 
    } catch(NumberFormatException e) { 
     return parseInt(input.nextLine(), input); 
    } 
} 

您可以使用它像這樣:

public static void main(String[] args) { 
    Scanner input = new Scanner (System.in); 
    int x1 = parseInt(input.nextLine(), input); 
    int x2 = parseInt(input.nextLine(), input); 
    String x3 = input.nextLine(); 

    if ("+".equals(x3)){ 
     int r= x1 + x2; 
     System.out.println(r); 
    } else if ("-".equals(x3)) { 
     int r= x1 - x2; 
     System.out.println(r); 
    } else if ("*".equals(x3)) { 
     int r= x1 * x2; 
     System.out.println(r); 
    } else if ("/".equals(x3)) { 
     int r= x1/x2; 
     System.out.println(r); 
    } else if ("%".equals(x3)) { 
     int r= x1 % x2; 
     System.out.println(r); 
    } else { 
     System.out.println("invalid input"); 
    } 
} 
0

問題是input.nextInt()只閱讀數字和input.nextLine()之後讀取空字符串。因此,被認爲是一個空字符串,並在最後給出錯誤。

@LórántViktor Gerber建議運作良好。

此外,我建議您確保您閱讀正確的輸入(可以打印出來),並且不要信任將要輸入的用戶。如果用戶輸入錯誤的輸入,例如stringdouble而不是integer,則程序將給出exception