我不久前发了一个问题,这个问题得到了解答并帮了我很多忙。很抱歉这么快就发布了。 = /
我已经完成了这个,并且不确定我做错了什么,印刷的结果是几个'无效'的话。我试图通过使用方法使用文本文件中的数据填充二维数组。然后在主类中运行该方法以打印出已填充的数组。
非常感谢任何帮助,谢谢你提前。 =)
主类:
public static void main(String[] args) throws IOException {
ScoreProcessor scores = new ScoreProcessor();
String[][] table = scores.readFile();
for (int row = 0; row < table.length; row++) {
for (int col = 0; col < table[row].length; col++) {
System.out.print(table[row][col] + "\t");
}
}
}
另一个类,包括方法:
public class ScoreProcessor {
static public String[][] readFile() throws IOException {
File filedata = new File("src/JavaApp2/Data.txt");
Scanner file = new Scanner(filedata);
int row = 0, col = 0;
String[][] scores = new String[8][5];
while (file.hasNext()) {
Scanner readfile = new Scanner(filedata);
readfile.nextLine();
readfile.useDelimiter(",");
while (readfile.hasNext(",")) {
String line = readfile.next();
line = scores[row][col] ;
col++;
} // end innerloop
row++;
col = 0;
} // end outerloop
return scores;
} // end method
} // end class
数据文件
Student,Q1,Q2,Q3,Q4
abcd0001,50,55,59,72
efgh0002,82,78,84,86
ijkl0003,42,45,46,52
mnop0004,66,74,72,78
qrst0005,82,86,89,88
uvwx0006,77,83,87,82
yzab0007,62,64,70,68
答案 0 :(得分:2)
该行
while (file.hasNextInt())
将返回false
。因此,您的数组不会使用数据初始化并返回null
打印。
如果readfile.nextLine()
返回null
,我建议您检查一下这个事实。
答案 1 :(得分:2)
正如其他人所指出的那样,file.hasNextInt()返回false,因为你正在读取的行不是int。因为它是null,所以你的代码永远不会进入循环,数据也不会被提供。
Scanner readfile = new Scanner(filedata);
String line1 = readfile.nextLine();
readfile = readfile.useDelimiter(",");
不要再次打开文件,只需读取每一行并将其拆分为','
String line = file.nextLine();
for (String each: line.split(",")) {
scores[row][col] = each;
}
答案 2 :(得分:1)
试试这个:
public class ScoreProcessor {
public static String[][] readFile() throws IOException {
File filedata = new File("src/JavaApp2/Data.txt");
Scanner file = new Scanner(filedata);
int row = 0;
String[][] scores = new String[8][5];
while(file.hasNextLine()){
String line=file.nextLine();
scores[row]=line.split(",");
row++;
}
return scores;
}
public static void main(String[] args) throws IOException {
String[][] table = readFile();
for (int row = 0; row < table.length; row++) {
for (int col = 0; col < table[row].length; col++) {
System.out.print(table[row][col] + "\t");
}
System.out.print("\n");
}
}
}
答案 3 :(得分:0)
查看hasNextInt()的定义。如果下一个令牌不能作为int解释,它将返回false。
我看到它的方式,你的文件以&#34; Student&#34;开头,或者如果你跳过标题行,使用&#34; abcd0001&#34;,但不是int。所以hasNextInt()
会立即返回false,而你的内循环永远不会被执行。
除此之外,我不清楚为什么要实例化第二个Scanner
。
使用调试器可以非常容易地跟踪这样的问题,我建议您熟悉这种方法:)
答案 4 :(得分:0)
使用file.hasNext()insted file.hasNextInt(),它应该解决问题
答案 5 :(得分:0)
不是这个(除了HasNextInt())问题的核心:
line = scores[row][col] ;
应该是另一种方式。这样,您的数组永远不会被填充,当然也只包含空值。
scores[row][col] = line;