0

次のコードと、txtファイルの各行に1つの番号しかないようなすべての番号を持つ入力ファイルがあります。各行の各番号を標準出力に印刷し、番号42に遭遇すると印刷を停止します。しかし、問題は、ファイルの読み取りに使用しているスキャナーオブジェクトが最初の番号を表示せず、2番目の番号からのみ印刷していることです。私のtxtファイルの番号。これはscanner.nextline関数と関係があると思いますが、わかりませんが、スキャナーに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()メソッドを何回呼び出したかに注意してください。つまり、2回なので、コードはファイルから1つおきの整数をスキップする必要があります。(ファイルから2つの整数のみを読み取る場合は、最初の数値のみ)

したがって、最も簡単な解決策は、整数をローカル変数に格納し、それを使用して比較および印刷することです。

すなわち:

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

            System.out.println(nextInteger);

        }
        theScanner.close();
于 2012-05-31T04:23:11.523 に答える
1

標準出力に出力する前に、スキャナー オブジェクトで nextInt() メソッドを 2 回呼び出していました。一度 if ステートメントで、もう一度 System.out.println で。したがって、スキャナは txt ファイルの 2 行目から印刷を開始しました。

ただし、解決策は次のようなコード行を含めることです。

 int temp = theScanner.nextInt();

if ステートメントの前に、if ステートメントを次のように変更します。

if(temp == 42)
   { 
      break;

   }

   System.out.println(temp);
于 2012-05-31T04:02:48.440 に答える