2017-08-04 106 views
0

我正在編寫一個Java程序,用戶在其中輸入三個主題的標記,並根據該標記獲取其成績,但在獲取輸入時出現錯誤。下面是代碼:在Java中使用nextInt獲取輸入

import java.util.*; 
public class Prog { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     int a, b, c; 
     double avg; 
     String gr; 
     System.out.println("marks in Physics,Chemistry,Biology"); 
     a = in .nextInt(); 
     b = in .nextInt(); 
     c = in .nextInt(); 
     avg = (a + b + c)/3; 
     if (avg > 80) { 
      gr = "distinction"; 
     } 
     if (avg >= 60 && avg < 80) { 
      gr = "first division"; 
     } 
     if (avg >= 45 && avg < 60) { 
      gr = "second division"; 
     } 
     if (avg >= 40 && avg < 45) { 
      gr = "pass"; 
     } else { 
      gr = "fail"; 
     } 
     System.out.println(gr); 
    } 
} 

它顯示了這個錯誤:

Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at Prog.main(Prog.java:9) 

什麼我做錯了,我該如何解決呢?

+1

您鍵入了什麼? – azro

回答

2

這適用於我,我的猜測是,你輸入的輸入不是一個整數 - 無論是文本或可能是一個小數點的數字?

如果是,你需要能夠帶小數點來處理數字,我建議把變量abc要麼doublefloat類型,然後使用in.nextDouble()in.nextFloat()

如果您需要處理非數字輸入,例如,如果有人輸入「one」而不是「1」,則需要將輸入值讀作Strings,並將其轉換爲in.next(),然後將其轉換爲整數(或者浮點數或雙精度數,如果你需要十進制數),並捕獲異常,如果它不轉換。作爲你會如何做這樣的事情的例子:

String inValue = in.next(); 
try { 
    a = Integer.parseInt(inValue); 
} catch (NumberFormatException ex) { 
    // Do something else, like exiting with an error message or setting the value to 0. 
} 

最後,檢查你的條件分數,我認爲其中至少有一個是不正確的(提示:儘量正確的等級邊界得分在你的代碼 - 例如40,45,60和80)。

4

nextInt method的文檔:

拋出:InputMismatchException - 如果下一個標記不匹配 Integer正則表達式,或者超出範圍

所以,你應該處理這如果用戶輸入錯誤的輸入,則爲異常可能是這樣的:

boolean inputOk = false; 
    do{ 
     System.out.println("enter your first grade"); 
     try { 
      a = in .nextInt(); 
      inputOk = true; 
     } catch (InputMismatchException e) { 
      System.out.println("not a valid number"); 
      in.nextLine(); // to reset the scanner 
     } 
    }while (!inputOk); 

與其他變量一樣。你甚至可以寫另一種方法來做到這一點,並避免重複自己(幹原理)

-2

輸入代碼適用於我,但你的if語句有缺陷。您需要更多「其他」語句:

if (avg > 80) { 
    gr = "distinction"; 
} else if (avg >= 60 && avg < 80) { 
    gr = "first division"; 
} else if (avg >= 45 && avg < 60) { 
    gr = "second division"; 
} else if (avg >= 40 && avg < 45) { 
    gr = "pass"; 
} else { 
    gr = "fail"; 
} 
+0

這是不正確的;您發佈的代碼和原始代碼是相同的。 – DaveyDaveDave

+1

**「你需要更多'其他'的陳述?」** - 嗯? –

+1

你怎麼可能聲稱我的代碼和原文是等價的?你有沒有試過運行它們?假設avg等於83.原始代碼將gr設置爲區別,但最後的if-else會將其設置爲失敗。我的代碼沒有。 – Speakjava