所以我有这段代码从csv文件中读取文本,其中nums []遍历整个文件并存储所述学生的编号,并且成绩[] []通过并存储他们的每个成绩:< / p>
Scanner sc = new Scanner(new FileReader("location.csv"));
String [][] stuff = new String [10][];
for(int i = 0; i<10; i++){
String line = sc.nextLine();
stuff[i] = line.split.(",");
}
int [][] grades = new int [10][10];
int [] nums = new int [10];
for(int x = 0; x<10; x++){
nums[x] = Integer.parseInt(stuff[x][0]);
System.out.println(nums[x]);
for(int y = 0; y<11; y++){
grades[x][y] = Integer.parseInt(stuff[x][y]);
}
}
问题在于麻木效果很好,但成绩无法存储超过第一列数据的任何值。如果我设置成绩[x][y] = stuff[any number]
[0]
它将会运行,但如果我尝试在行中超过0,则会错误终止。
数据文件的一部分:
1, 66, 82, 85, 87, 65, 80, 97, 75, 68, 72
2, 70, 63, 75, 62, 84, 65, 67, 95, 81, 96
3, 100, 98, 73, 78, 69, 75, 97, 66, 61, 90
4, 75, 62, 79, 78, 87, 73, 74, 76, 63, 84
5, 81, 90, 80, 66, 75, 96, 73, 77, 66, 87
堆栈跟踪: java.lang.NumberFormatException:对于输入字符串:&#34; 66&#34;
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
在java.lang.Integer.parseInt(Integer.java:481)
在java.lang.Integer.parseInt(Integer.java:527)
固定代码(我道歉,我没有逐字复制代码并在其中包含一些额外的错误)
public static void main(String [] args)抛出FileNotFoundException
{
Scanner sc = new Scanner(new FileReader("location.csv"));
String [][] values = new String [10][];
for(int i = 0; i<10; i++){
String line = sc.nextLine();
values[i] = line.split(",");
}
int [][] grades = new int [10][10];
int [] nums = new int [10];
for(int x = 0; x<10; x++){
nums[x] = Integer.parseInt(values[x][0]);
System.out.println(nums[x]);
for(int y = 0; y<10; y++){
grades[x][y] = Integer.parseInt(values[x][y+1].trim());
}
}
答案 0 :(得分:5)
你没有摆脱令牌之间的空白。
请务必清除它,最好使用String#trim()
Integer.parseInt(stuff[x][0].trim());
为了记录,我还希望使用比stuff
更好的名称。
答案 1 :(得分:0)
此外,当您修复其他错误时,您将获得超出范围的索引:
for( int y = 0; y < 11; y++ )
grades[x][y] = Integer.parseInt( stuff[x][y] );
你的所有数组索引都是10,在Java中意味着0到9. y这里将是10,所以繁荣超出范围。
考虑到评论中指出的语法错误,请将来复制并粘贴您正在使用的EXACT代码。如果我们调试的代码与您实际使用的代码不同,那就不好了。