2013-10-22 13 views
1

我的java代碼有點問題。 我想創建一個對象數組,允許從文本文件輸入一行。關於對象數組的Java錯誤和從文件中讀取下一行

這是我的代碼:

code withheld, solution found 

這顯然要初始化與來自該方法返回的大小的對象陣列。

我試圖做一個循環,從文件'songFile'中讀取每一行,但返回一個錯誤。

這裏是我的循環代碼:

code withheld, solution found 

這是getLineAmt方法的代碼:

code withheld, solution found 
+1

它「返回」是什麼錯誤? – Kon

+0

錯誤說什麼? – Craig

+0

異常在線程「主要」 java.util.NoSuchElementException:沒有發現線 \t在java.util.Scanner.nextLine(未知來源) \t在mainProgram.main(mainProgram.java:23) –

回答

1

getLineAmt(Scanner songFile)方法消耗你的文件之前添加以下檢查。一旦該方法返回,您的Scanner已經讀取文件,並已達到結束。

解決該問題的一種方法是簡單地使用List對象而不是數組,因此您不需要事先知道大小或文件。

List<Song> songList = new ArrayList<Song>(); 

while(songFile.hasNextLine()) { 
    songList.add(new Song(songFile.nextLine())); 
} 
+0

我已經嘗試這樣做,我得到這個錯誤: –

+0

異常線程「main」 java.lang.ArrayIndexOutOfBoundsException:6 \t 宋。 (Song.java:17) \t at mainProgram.main(mainProgram.java:22) –

+0

這看起來像是宋構造函數中的一個問題。你有沒有對自己的歌班進行測試,以確保它有效? – Francis

0

您收到此錯誤,因爲你試圖讀取一行未做確定是否還有更多的行要被讀取。您需要修改和讀取nextLine計算行數時

for (int i = 0; i < songArray.length; i++) 
{ 
if(songFile.hasNext()){ 
songArray[i] = new Song(songFile.nextLine()); 
} 
} 
+0

這樣可以修正錯誤,但是當試圖從songArray [1]讀取一個變量時,它只顯示空。相同的任何其他號碼。 –

0

您正在計算歌曲文件中的行數,因此您處於數據流結束位置,因此當您調用nextLine()時,不會有一行。使用ArrayList<Song>而不是Song[],的數組,那麼你根本不需要數線。