2013-10-15 101 views
1

我有一個格式爲正方形數組的文本文件。我試圖將其轉換爲Java中的二維數組。 「st」是下面描述的文本文件。Java - 從文本文件創建2D數組時遇到問題

這是我的代碼:

public createArray(String st) throws NumberFormatException, IOException { 

InputStream is; 

is = new FileInputStream(st); 

BufferedReader br = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); 
    int row = 0; 

    while ((line = br.readLine()) != null){ 
     String[] nums = line.split(" "); 

     for (int col = 0; col < nums.length; col++){ 

      int n = Integer.parseInt(nums[col]); 

      myArray[row][col] = n; 
     } 
     row++; 

    } 

我收到就行了一個空指針異常:

myArray[row][col] = n; 

如果我打印出來行,列的值,而n在每次迭代,他們似乎正確地重合。但是,我仍然得到一個NullPointerException。

1 2 3 4 5 6 7 8 9 10 
11 12 13 14 15 16 17 18 19 20 
21 22 23 24 25 26 27 28 29 30 
31 32 33 34 35 36 37 38 39 40 
41 42 43 44 45 46 47 48 49 50 
51 52 53 54 55 56 57 58 59 60 
61 62 63 64 65 66 67 68 69 70 
71 72 73 74 75 76 77 78 79 80 
81 82 83 84 85 86 87 88 89 90 
91 92 93 94 95 96 97 98 99 0 
+0

我懷疑這的Integer.parseInt的最短途徑(NUMS [COL])可能拋出NPE。 – upog

+1

顯示你如何聲明'myArray'? – sanbhat

+0

myArray是一個實例變量,聲明爲int [] [] myArray; – user2121620

回答

4

我想你還沒有初始化int[][] myArray;

你應該做這樣的事情

int[][] myArray = new int[100][100]; 

OR

找到總:

文本文件的格式行中的行並初始化該行。而在每個循環計算列,並創建所需的陣列

int[][] myArray; 
{ 
    int rows = getTotalRows(); 
    myArray = new int[rows][]; 
} 

然後

while ((line = br.readLine()) != null){ 
     String[] nums = line.split(" "); 
     myArray[row] = new int[nums.length]; //initialize dynamically here 
     for (int col = 0; col < nums.length; col++){ 

      int n = Integer.parseInt(nums[col]); 

      myArray[row][col] = n; 
     } 
     row++; 
} 
+0

是的,這是問題所在 - 謝謝。 – user2121620

3

問候你的評論並沒有主動陣列。

int[][] myArray = new int[100][]; // enough to define rows 

其他方式:

如果你使用的Java 7,您可以加載文本文件List。據我所知,這是創建String[][]

String[][] myArray; 

List<String> lines = Files.readAllLines(Paths.get("<your filename>"), StandardCharsets.UTF_8); 

myArray = new String[lines.size()][]; 

for(int i =0; i<lines.size(); i++){ 
    myArray[i] = lines.get(i).split("[ ]+"); // you can use just split(" ") but who knows how many empty spaces 
} 

現在你已經填充myArray[][]