2013-10-15 74 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[][]