当我';我在java的io文件中使用.hasNext

当我';我在java的io文件中使用.hasNext,java,Java,基本上,我试图计算txt文件中的行数,然后将其作为索引存储到数组中 File file = new java.io.File("number.txt"); Scanner s = new Scanner(file); int count = 0; while(s.hasNextLine()) { count++; System.out.println(count); } System.out.println("There is: " + count + " line )

基本上,我试图计算txt文件中的行数,然后将其作为索引存储到数组中

File file = new java.io.File("number.txt");
Scanner s = new Scanner(file);
int count = 0;
while(s.hasNextLine())
{     
    count++;
    System.out.println(count);
}
System.out.println("There is: " + count + " line );
int[] array = new int[count];
然而,我意识到“计数”是无穷大的,它从不停止计数,但我的txt文件中只有20行。为什么会发生这种情况

注意:我知道如何修复,但我只是好奇为什么它会一直计数,你应该使用它

scanner.nextLine()
结合

scanner.hasNextLine()
hasNextLine将检查是否有下一行可用,但它不会转到下一行,因为您需要使用nextLine。当使用这两种方法时,您将看到计数器在解析最后一行后停止。所以你的代码应该是这样的

File file = new java.io.File("number.txt");
Scanner s = new Scanner(file);
int count = 0;
while(s.hasNextLine())
{   
    s.nextLine();
    count++;
    System.out.println(count);
}
System.out.println("There is: " + count + " line );
int[] array = new int[count];
你应该使用

scanner.nextLine()
结合

scanner.hasNextLine()
hasNextLine将检查是否有下一行可用,但它不会转到下一行,因为您需要使用nextLine。当使用这两种方法时,您将看到计数器在解析最后一行后停止。所以你的代码应该是这样的

File file = new java.io.File("number.txt");
Scanner s = new Scanner(file);
int count = 0;
while(s.hasNextLine())
{   
    s.nextLine();
    count++;
    System.out.println(count);
}
System.out.println("There is: " + count + " line );
int[] array = new int[count];

因为这就是它的设计方式

公共布尔值hasNextLine()

如果此扫描仪的输入中有另一行,则返回true。 此方法在等待输入时可能会阻塞。扫描器不工作 超越任何输入

返回: 当且仅当此扫描仪有另一行输入时为true 大宗报价

抛出: IllegalStateException-如果此扫描仪已关闭


因为这就是它的设计方式

公共布尔值hasNextLine()

如果此扫描仪的输入中有另一行,则返回true。 此方法在等待输入时可能会阻塞。扫描器不工作 超越任何输入

返回: 当且仅当此扫描仪有另一行输入时为true 大宗报价

抛出: IllegalStateException-如果此扫描仪已关闭


因为您从未通过
s.nextLine()
扫描仪移动到下一行……直到您阅读它,这一行仍然存在。“我知道如何修复”,那么您将如何修复它?您认为修复程序是如何工作的?因为您从未通过
s.nextLine()
使
扫描仪移动到下一行……直到您阅读它之前,该行仍然存在。“我知道如何修复”,因此您将如何修复它?您认为修复程序是如何工作的?这就是为什么当我在while循环var=s.nextInt()中声明一个变量时,它将转到下一行,但如果没有它,它将保持在文件的第一行?是的,正如上面的javadoc已经提到的,hasnextline()不会超过任何输入,但是nextInt()会(或者至少尝试这样做)。这就是为什么当我在while循环var=s.nextInt()中声明一个变量时,它会转到下一行,但如果没有它,它会一直停留在文件的第一行吗?是的,正如上面的javadoc已经提到的,hasnextline()不会超过任何输入,但nextInt()会(或者至少会尝试)。