我有一个.txt文件,如下所示:
Mathematics:MTH105
Science:SCI205
Computer Science:CPS301
...
我有一项任务,要求我读取文件并将每一行放入一个看起来像这样的数组:
subjectsArray[][] = {
{"Mathematics", "MTH105"},
{"Science", "SCI205"},
{"Computer Science", "CPS301"}
};
当我尝试将文件内容添加到二维数组时出现编译错误:
private static String[][] getFileContents(File file) {
Scanner scanner = null;
ArrayList<String[][]> subjectsArray = new ArrayList<String[][]>();
//Place the contents of the file in an array and return the array
try {
scanner = new Scanner(file);
int i = 0;
while(scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] lineSplit = line.split(":");
for(int j = 0; j < lineSplit.length; j++) {
subjectsArray[i][j].add(lineSplit[0]); //The type of the expression must be an array type but it resolved to ArrayList<String[][]>
}
i++;
}
return subjectsArray;
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
scanner.close();
}
return null;
}
错误读取:
The type of the expression must be an array type but it resolved to ArrayList<String[][]>
我是多维数组的新手,不知道我做错了什么。有人能告诉我我做错了吗?
答案 0 :(得分:2)
您的第一个错误是选择结果的类型:此类型
ArrayList<String[][]>
表示三维结构 - 二维阵列列表。你需要的是一个二维结构,例如
ArrayList<String[]>
所以第一个修复是这样的:
List<String[]> subjectsArray = new ArrayList<String[]>(); // Note the type on the left: it's an interface
完成此操作后,其余代码将自行流动:您不需要内部for
循环,它将被一行代替:
subjectsArray.add(lineSplit);
最终解决方案是return
行:您需要将List<String[]>
转换为String[][]
,这可以通过调用toArray()
来完成,如下所示:
return subjectsArray.toArray(new String[subjectsArray.size()][]);
答案 1 :(得分:0)
我认为您正在尝试在String上使用ArrayList方法。我不确定这是可能的。我认为最简单的方法就是:
for(int j = 0; j < lineSplit.length; j++) {
subjectsArray[i][j]=lineSplit[j];
}