我有一个.data文件,如下所示:
我希望我的main方法能够读取文件并将其存储到二维int数组中,有一个“?”在数据中我希望它转换为0。
到目前为止我有这个代码,但它不起作用,我得到一个空指针异常(可能是从我的二维数组初始化为null)。问题是如果我没有将我的二维数组初始化为null它会给我错误编辑(这回答了问题的一部分,但我怎样才能让java得到数量的大小数据中的行然后将dataSet初始化为int [行数] [每行中的数字],我甚至不能让java首先读取文件)
public static void main(String[] args){
int[][] dataSet = null;
try {
Scanner inFile = new Scanner(new File("C:\\Data Folder\\file.data"));
while (inFile.hasNextInt()){
for (int i = 0; i < dataSet.length; i++){
for (int j = 0; j < dataSet[i].length;){
dataSet[i][j] = inFile.nextInt();
}
System.out.println(dataSet[i]);
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我从来没有修改过Java上的文件,所以这对我来说都是新的。
感谢任何建议
编辑:下午3:11
所以我将我的二维数组改为数组列表,谢谢马苏德:
public static void main(String[] args){
List<Integer> dataSet;
try {
Scanner inFile = new Scanner(new File("C:\\Data Folder\\file.data"));
while (inFile.hasNextInt()){
for (int i = 0; i < dataSet.size(); i++){
dataSet.add(inFile.nextInt());
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Eclipse仍然要求我设置dataSet = null。如何从.data文件中获取每行中行数和数字的大小?
编辑:下午3:23
感谢Merlin实施Masud的建议,我已经更新了我的主要方法来代表你的代码,看它是否有效。我一直收到这个错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "1 15943882 63 1 -9 -9 -9"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
以下是我使用的代码:
public static void main(String[] args){
List<int[]> dataSet = new ArrayList<int[]>();
try {
Scanner inFile = new Scanner(new File("C:\\Data Folder\\file.data"));
while (inFile.hasNextLine()){
String line = inFile.nextLine();
String[] cols = line.split(",");
int[] rows = new int[cols.length];
for (int i = 0; i < cols.length; i++){
if (!cols[i].equals("?")){
rows[i] = Integer.parseInt(cols[i]);
}
else {
rows[i] = 0;
}
}
dataSet.add(rows);
}
System.out.println(dataSet.size());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
它还告诉我在inFile中添加“@suppress warning”。
修改
我通过将文件路径更改为已处理的数据文件来修复错误,抱歉这是我的错。 Merlin和Masud感谢您的指导!
答案 0 :(得分:2)
如果您的代码必须处理不同大小的数据,那么使用固定大小的数组并不是正确的答案。但是,您可以让Java为您确定列数。
List<int[]> dataSet = new ArrayList<int[]>();
while (inFile.hasNextLine()){
String line = inFile.nextLine();
String[] cols = line.split(",");
int[] row = new int[cols.length];
for (int i = 0; i < cols.length; i++)
if (!cols[i].equals("?")) row[i] = Integer.parseInt(cols[i]);
else row[i] = 0;
dataSet.add(row);
}
答案 1 :(得分:0)
您已回答了您的问题。问题是dataSet为null因此是NullPointerException。您必须在使用
之前初始化它int[][] dataSet = new int[size1][size2]
其中size1和size2是数组的已知大小。第二个问题是,在阅读文件之前你是否知道尺寸?首先,我将2维数组更改为列表列表,但也可以有更好的数据结构。