2016-03-12 142 views
1

想要在逗号分隔的文本文件中打印矩阵,但此代码将打印出全部为零的矩阵,而不是文本文件中的矩阵。从逗号分隔的文本文件中读取数组

public int[][] readFromFile() throws FileNotFoundException { 
    Scanner in = new Scanner(new File("C:\\Users\\Aidan\\Documents\\NetBeansProjects\\matrix\\src\\matrix\\newfile")); 
    int[][] a = new int[9][9]; 
    while (in.hasNext()) { 
     String word = in.next(); 
     if (word.equals(",")) { 
      continue; 
     } 
     System.out.println(word); 
     int x = 0; 
     int y = 0; 
     //System.out.println(Integer.parseInt(word)); 
     int s = Integer.parseInt(word); 
     a[x++][y++] = s; 
    } 
    return a; 
} 
+4

我推荐使用像apache commons csv库这样的东西。为什么重新发明轮子? – user1875195

+0

@ user1875195是完全正确的。我已经看到过多的手工构建的代码可以用于一个csv文件,并且会在下一个文件中失败。很少的应用程序严格遵守csv标准,所以你需要一个可以处理变化的解析器。大多数手工构建的解析器无法处理(一个,两个,三个)和(“一个,七个”,两个,三个),这两个都是有效的csv。 – christutty

+0

为了解决您的问题,我们需要查看您要导入的csv文件和输出(特别是println(word)的输出) – christutty

回答

0

假设你已经在你的CSV文件使用多行:

1,2,3,4,5,6,7,8,9 
2,3,4,5,6,7,8,9,1 
3,4,5,6,7,8,9,1,2 
... 

你应该能够做到像下面这样:

int[][] a = new int[9][9]; 
Scanner in = new Scanner(new File("C:\...")); 
for (int i = 0; i < 9; i++) { 
    String[] line = in.nextLine().split(","); 
    for (int j = 0; j < 9; j++) { 
     a[i][j] = Integer.parseInt(line[j]); 
    } 
} 

这是最低限度,并且包括没有错误检查,如果您的csv中的行少于9个逗号分隔的数字,程序将崩溃。

相关问题