代码之家  ›  专栏  ›  技术社区  ›  tavalendo

从方法读取文件时获取无限循环

  •  1
  • tavalendo  · 技术社区  · 5 年前

    我正在尝试重构我的代码,并在可能的情况下添加方法。当我从一个方法中读取一个文件并返回计算结果时,代码将进入极端的内存消耗,无限循环。

    我的修改如下:

    import java.util.Scanner;
    
    public class NumberOfLines {
        public static int compute () {
            // read this file
            String theFile = "numbers.txt";
    
            Scanner fileRead = null;
    
            if (NumberOfLines.class.getResourceAsStream(theFile) != null) {
                fileRead = new Scanner(NumberOfLines.class.getResourceAsStream(theFile));
            }           
            else {
                System.out.print("The file " + theFile + " was not found");
                System.exit(0);
            }
    
            System.out.println("Checkpoint: I am stuck here");
    
            // count number of lines
            int totalLines = 0;
            while(fileRead.hasNextInt()) {
                totalLines++;
    
            }
            fileRead.close();
            return totalLines;
    
        }
    
        public static void main (String[] args) {
    
            System.out.println("The total number of lines is: " + compute());
    
    
        }
    }
    

    如果不是编写方法,而是将代码放在main上,那么它就可以工作了。这是为什么?

    编辑

    内容 数字.txt 是:

    5 
    2
    7
    4
    9
    1
    5
    9
    69
    5
    2
    5
    6
    10
    23
    5
    36
    5
    2
    8
    9
    6
    

    因此,我预计结果是:

    线路总数为:22

    1 回复  |  直到 5 年前
        1
  •  5
  •   Nicholas K amamede    5 年前

    陷入无限循环的原因是您正在读取文件,但在while循环中没有递增scanners标记。所以那时候 条件 总是真的。

    while (fileRead.hasNextInt()) {
        totalLines++;
        fileRead.nextInt();  // change made here only
    }