0

我有以下代码和一个包含所有数字的输入文件,因此 txt 文件中的每一行只有一个数字。我将每行上的每个数字打印到标准输出上,如果遇到数字 42,我将停止打印。但问题是我用来读取文件的扫描仪对象未显示第一个数字,而仅从第二个数字打印我的 txt 文件的编号。我认为这与我不知道的scanner.nextline 函数有关,但我希望scanner 有一个getcurrent 或类似的东西以使事情变得更简单。无论如何,谁能告诉我如何解决这个问题并让第一行显示出来。

这是我的代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class driver {

    /**
     * @param args
     * @throws FileNotFoundException 
     */
    public static void main(String[] args) throws FileNotFoundException {
        // TODO Auto-generated method stub


        File theFile = new File("filepath.../input.txt");

        Scanner theScanner = new Scanner(theFile);

        //so that the scanner always starts from the first line of the document.
        theScanner.reset();


        while(theScanner.hasNext())
        {
            if(theScanner.nextInt() == 42)
            {
                break;
            }

            System.out.println(theScanner.nextInt());

        }
    }

}
4

3 回答 3

2

问题是您在进行检查时正在读取一个数字,然后在读取另一个您打印出来的新数字。这意味着您每秒钟打印一次数字。要解决它,只需先存储数字:

       int number = theScanner.nextInt() 
       if(number == 42)
        {
            break;
        }

        System.out.println(number);
于 2012-05-31T04:03:27.823 回答
1

在打印到标准输出之前,我在扫描仪对象上调用了 nextInt() 方法两次。一次在 if 语句中,再次在 System.out.println 中。因此扫描仪从 txt 文件的第二行开始打印。

但解决方案将包括一行代码,如下所示:

 int temp = theScanner.nextInt();

在 if 语句之前,然后将 if 语句修改为:

if(temp == 42)
   { 
      break;

   }

   System.out.println(temp);
于 2012-05-31T04:02:48.440 回答
1

注意你调用了多少次 nextInt() 方法。即两次,因此您的代码必须从文件中跳过每隔一个整数。(如果您只从文件中读取两个整数,则只有第一个数字)

所以最简单的解决方案是将整数存储在一个局部变量中,并用它来比较和打印。

IE:

   while(theScanner.hasNext())
        {
            int nextInteger=theScanner.nextInt();
            if(nextInteger == 42)
            {
                break;
            }

            System.out.println(nextInteger);

        }
        theScanner.close();
于 2012-05-31T04:23:11.523 回答