读取文本文件,for for while vs in in for(java)

时间:2014-06-10 09:15:10

标签: java for-loop while-loop java.util.scanner

这是一个非常简单的学校练习代码示例。我得到了它的工作,但我不明白为什么我的第一个想法不起作用。我的第一个想法是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();
 }

2 个答案:

答案 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。