【问题标题】:how to read Integer from a text file in Java如何从Java中的文本文件中读取整数
【发布时间】:2017-11-14 08:15:28
【问题描述】:

我正在尝试在 java 中读取一个包含整数值的文件,我为此找到了以下答案:

Java: Reading integers from a file into an array

但我的代码陷入了无限循环。

我的代码是:

Scanner scanner = new Scanner(new File("/home/lalit/Desktop/Project/key_x.txt"));
        //Scanner scanner1 = new Scanner(new File("/home/lalit/Desktop/Project/key_y.txt"));

           int i = 0,count=0;
           while(scanner.hasNextInt())
           {
                System.out.println("This is count "+count);
               count++;
           }

以上代码进入无限循环。

我的文本文件包含:

317

40

280

10

318

24

456

126

4

129

404

468

287

275

165

我又遇到了一个问题,当我尝试将元素存储在 int 数组中时,它会引发异常;

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at Hybrid.Image.main(Image.java:503) 

我存储数组元素的代码是:

  int tall[] =new int[count];
   int tall1[] =new int[count];
   while(scanner.hasNextInt())
   {
        int k=scanner.nextInt();
        tall[i] =k;
        System.out.println(tall[i]);
        i++;
   }

【问题讨论】:

  • 你永远不会在循环中获取值。你必须打电话给nextInt()

标签: java


【解决方案1】:

循环永远不会结束,因为条件永远不会改变。您只是在检查扫描仪是否“下一个int”,而您实际上从未读过那个int。所以它总是准备好读取文件中的第一个int

如果您不关心 int 是什么而只想从扫描仪中读取它,您可以这样做并忽略该值:

while(scanner.hasNextInt())
{
    scanner.nextInt();
    System.out.println("This is count "+count);
    count++;
}

或者,如果您确实想要对 int 实际执行某些操作,则它将在 scanner.nextInt() 的返回值中。

【讨论】:

    【解决方案2】:

    如下所示更改您的代码,因为您永远不会获取值。

    Scanner scanner = new Scanner(new File("/home/lalit/Desktop/Project/key_x.txt"));
            //Scanner scanner1 = new Scanner(new File("/home/lalit/Desktop/Project/key_y.txt"));
    
               int i = 0,count=0;
               while(scanner.hasNextInt())
               {
                    scanner.nextInt()
                    System.out.println("This is count "+count);
                   count++;
               }
    

    【讨论】:

      【解决方案3】:

      当您创建 Scanner 时,它具有内部状态。当您使用scanner.nextXXX() API 从中获取数据时,可以更改此状态。

      scanner.hasNextInt() 不改变状态。只检查它。虽然scanner.nextInt() 确实改变了它的状态,然后在你下次调用它时,它会获取下一条数据。

      【讨论】:

        【解决方案4】:

        你忘记移动光标了。

        扫描器通过读取输入流来工作。您可以想象将整个文件放在一个长字符串中,然后在其开头放置一个光标。然后,当您调用 .hasNextInt() 时,您会询问扫描仪当前位置的光标前面是否有一个整数。如果有,它将返回 true 但实际上不会移动光标。光标只会在您调用 nextInt() 时移动。并且scanner.nextInt() 也将返回一个整数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-25
          • 1970-01-01
          • 1970-01-01
          • 2013-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多