这是一个非常简单的学校练习代码示例。我得到了它的工作,但我不明白为什么我的第一个想法不起作用。我的第一个想法是double for循环中的while循环(参见comments / * * /)。如果我使用那些循环它给了我一个填充零的数组(有一个文件integer.txt,随机数在同一方向,这不是问题)。
它与sc.hasNextInt()有关吗?我真的不明白为什么它以这种方式起作用而不是另一种方式。
感谢您提前解释。
public static void main(String[] args) throws IOException {
String filename = "integer.txt";
FileReader fr = new FileReader(filename);
Scanner sc = new Scanner(fr);
int[][] getallen = new int[2][5];
/*for(int i = 0; i < 2; i++){
for(int j = 0; j < 5; j++){
while(sc.hasNextInt()){
getallen[i][j] = sc.nextInt();
}
}
}*/
while(sc.hasNextInt()){
for(int i = 0; i < 2; i++){
for(int j = 0; j < 5; j++){
getallen[i][j] = sc.nextInt();
}
}
}
for(int i = 0; i < 2; i++){
for(int j = 0; j < 5; j++){
System.out.print(getallen[i][j] + " ");
}
System.out.println();
}
System.out.println("Ok.");
sc.close();
}
答案 0 :(得分:1)
为什么
for(int i = 0; i < 2; i++){
for(int j = 0; j < 5; j++){
while(sc.hasNextInt()){
getallen[i][j] = sc.nextInt();
}
}
}
这段代码不起作用?
因为一旦它到达你的while循环,它将一次又一次地覆盖相同的索引值。
答案 1 :(得分:0)
在你的while循环中,i和j永远不会继续前进,所以在你的while循环中你经常在getallen
内覆盖相同的位置。
只需跟踪代码的作用,它应该是显而易见的。 i和j为0.然后循环从扫描仪中拉出所有内容并将其设置为getallen [0] [0]。然后它会耗尽扫描仪,因此它会以0,0包含最后一个扫描仪值继续运行。对于每一个步骤(除非有新的东西进入扫描仪)hasNextInt()返回false所以它永远不会执行并且getallen [i] [j]没有被修改,这意味着它保持默认值为0。