2012-10-04 86 views
1

不久前我發佈了一個問題,這個問題得到了回答,並且幫了我很大的忙。很抱歉,請儘快發佈。 =/數組的結果爲空?

我已經過了這個,不知道我做錯了什麼,打印的結果是幾個'空'字。我正在嘗試使用方法從文本文件中填充數據。然後在主類中運行該方法以打印出已填充的數組。

任何幫助將不勝感激,謝謝你提前。 =)

主類:

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

    ScoreProcessor scores = new ScoreProcessor(); 

    String[][] table = scores.readFile(); 


    for (int row = 0; row < table.length; row++) { 
     for (int col = 0; col < table[row].length; col++) { 
      System.out.print(table[row][col] + "\t"); 
     } 
    } 
} 

另一類中,包括方法:

public class ScoreProcessor { 

    static public String[][] readFile() throws IOException { 

     File filedata = new File("src/JavaApp2/Data.txt"); 
     Scanner file = new Scanner(filedata); 

     int row = 0, col = 0; 

     String[][] scores = new String[8][5]; 


     while (file.hasNext()) { 

      Scanner readfile = new Scanner(filedata); 
      readfile.nextLine(); 
      readfile.useDelimiter(","); 

      while (readfile.hasNext(",")) { 
       String line = readfile.next(); 


      line = scores[row][col] ; 
       col++; 
      } // end innerloop 
      row++; 
      col = 0; 


     } // end outerloop 

     return scores; 
    } // end method 
} // end class 

數據文件

Student,Q1,Q2,Q3,Q4 
abcd0001,50,55,59,72 
efgh0002,82,78,84,86 
ijkl0003,42,45,46,52 
mnop0004,66,74,72,78 
qrst0005,82,86,89,88 
uvwx0006,77,83,87,82 
yzab0007,62,64,70,68 
+0

你的Data.txt文件是怎麼樣的? –

+0

我認爲你的內循環不會在最後一個逗號之後讀取條目*。這可能是一個問題嗎? – Thilo

+0

用數據編輯。 – user1719605

回答

2

正如其他人指出的,file.hasNextInt()返回false,因爲您正在讀取的行不是int。由於它是空的,你的代碼永遠不會進入循環,並且數據不會被傳送。

Scanner readfile = new Scanner(filedata); 
    String line1 = readfile.nextLine(); 
    readfile = readfile.useDelimiter(","); 

不要再次打開該文件,只是讀每一行並把它分解 ''

String line = file.nextLine(); 

for (String each: line.split(",")) { 
    scores[row][col] = each; 
} 
+0

非常感謝大家。它現在似乎按預期工作。 :) – user1719605

2

while (file.hasNextInt())

將返回false。因此你的數組不會被數據初始化並返回null打印。

如果readfile.nextLine()返回null或沒有,我會建議您檢查一下事實。

0

查看hasNextInt()的定義。如果下一個標記不是int,則它將返回false。

我看到它的方式,您的文件以「學生」開頭,或者如果您跳過標題行,使用「abcd0001」,但不是int。因此hasNextInt()會立即返回false,並且您的內循環永遠不會被執行。

除此之外,我不清楚爲什麼你實例化第二個Scanner

像這樣的問題可以用一個調試器很容易被追蹤到,我建議你熟悉這種方法:)

0

使用file.hasNext()insted的file.hasNextInt()的,它應該解決的問題

1

試試這個:

public class ScoreProcessor { 

     public static String[][] readFile() throws IOException { 

      File filedata = new File("src/JavaApp2/Data.txt"); 
      Scanner file = new Scanner(filedata); 

      int row = 0; 

      String[][] scores = new String[8][5]; 

      while(file.hasNextLine()){ 
       String line=file.nextLine(); 
       scores[row]=line.split(","); 
       row++; 
      } 

      return scores; 
     } 

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

      String[][] table = readFile(); 

      for (int row = 0; row < table.length; row++) { 
       for (int col = 0; col < table[row].length; col++) { 
        System.out.print(table[row][col] + "\t"); 
       } 
       System.out.print("\n"); 
      } 
     } 

    } 
0

是不是也該(除HasNextInt())問題的核心:

line = scores[row][col] ; 

shou也可以用其他方式。這樣你的數組永遠不會被填充,當然總是隻包含空值。

scores[row][col] = line;