2013-07-28 142 views
-5

我不斷收到看起來像這樣的錯誤,我想不通爲什麼:有人能告訴我這個java代碼有什麼問題嗎?

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:840) 
at java.util.Scanner.next(Scanner.java:1461) 
at java.util.Scanner.nextInt(Scanner.java:2091) 
at java.util.Scanner.nextInt(Scanner.java:2050) 
at Assignment20.main(Assignment20.java:17) 

這裏是我的代碼

import java.util.Scanner; 
import java.io.File; 

public class Assignment20{ 



public static void main(String[] args) throws Exception{ 

    File myFile = new File("scores.txt"); 

    Scanner input = new Scanner(myFile); 

while (input.hasNext()) { 
    String firstName = input.next(); 
    String mi = input.next(); 
    String lastName = input.next(); 
    int score = input.nextInt(); 
    System.out.println(
    firstName + " " + mi + " " + lastName + " " + score); 
} 


input.close(); 


} 
} 

的文本文件,我試圖讓它看上去閱讀這樣

哈利波特,72

羅恩韋斯萊,68

赫敏格蘭傑,98

艾伯斯,90

尼維爾,75

盧娜,86

馬爾夫,64

張秋,88

金尼Weasley,78

To米里德爾,92

我需要做些什麼來解決這個問題?

編輯:我改變了文本文件,但它仍然不工作,我得到相同的錯誤。有人可以向我展示固定代碼嗎?我不明白我必須做什麼。

+2

提示:嘗試打印出firstName,mi和lastName(在讀取int之前),看看你得到了什麼 – radai

+0

想一想,看看你的文本文件的結構。它與您想要在代碼中檢索的數據相匹配嗎?! – yohm

回答

1

默認的Scanner分隔符是空格。因此,您的next()電話中的一個正在使用姓氏和分數(例如「Potter,72」)。因此,nextInt()呼叫失敗。

此外,您似乎試圖讀取四個值,當你只有兩個(考慮Scanner是治療姓氏和得分爲一)。選擇空格或逗號作爲分隔符。如果您選擇使用逗號分隔值,那麼也使用Scanner#useDelimiter(",")

Harry,Potter,72 
Ron,Weasley,68 

考慮到文件格式與上述(CSV),可以使用下面的代碼。

Scanner input = new Scanner(myFile).useDelimiter(","); 

while (input.hasNextLine()) { 
    String[] line = input.nextLine().split(","); 
    String firstName = line[0]; 
    String lastName = line[1]; 
    int score = Integer.parseInt(line[2]); 
    System.out.println(firstName + " " + lastName + " " + score); 
} 
+0

我該在哪裏放置Scanner#useDelimiter(「,」)命令? –

+0

@HaleyComeau檢查更新。 –

+0

完美工作,謝謝。 –

1

異常是自我解釋。您正在閱讀的參數與您分配的參數類型不匹配。 最有可能的誤差範圍是int score = input.nextInt();

只是爲了調試的目的,我建議用int score = input.next();更換int score = input.nextInt();。這將幫助您確定錯誤。

+0

這隻會讓它在配置窗口出錯 –

0

您的文本文件結構不好,請使用空格分隔值。並且由於您的文件不包含任何中間名,因此無需檢索。

更改文本文件的結構如下:

分數。TXT

Harry Potter 72 
Ron Weasley 68 
Hermione Granger 98 
Albus Dumbledore 90 
Neville Longbottom 75 
Luna Lovegood 86 
Draco Malfoy 64 
Cho Chang 88 
Ginny Weasley 78 
Tom Riddle 92 

試試這個:

​​

}

+0

這給了我以下錯誤:線程「main」java.lang.ArrayIndexOutOfBoundsException中的異常:1 \t at Assignment20.main(Assignment20.java:18) –

0

你需要修復要在其中放置輸入到你的程序的文本文件。首先,文本記錄中行的格式應該是這樣的Tom Riddle , 92而不是Tom Riddle,92。中間名和逗號之間的空格,以及分數之間的空格應該在那裏。否則Riddle,92被讀爲單個令牌,當該令牌被分配給字符串時,該令牌會導致錯誤併產生錯誤,並且整數爲score

相關問題