0

スキャナーにデータの各行を読み取らせ、設定した境界内で「モデル」という単語の後に年が続く行のみを出力させようとしています。これを行うためのより効率的な方法があるかどうかはわかりませんが、データのセット全体に対して 1 つのスキャナーを作成し、その中で各行を読み取る別のスキャナーを宣言しました。次に、行に正しい年が含まれている場合は、「モデル」という単語と年で構成される文字列を探すように設定しようとしました。Scanners のトークンはスペースで区切られているため、最初のトークンをスペースと年を組み合わせた別の文字列 tokenToken を宣言するのが正しい方法であると考えました (そのような組み合わせが存在する場合)。

現在、実行すると、永久に実行されますが、完了しません

public static void main(String[] args) {

    Scanner inStream = new Scanner(System.in);

    while (inStream.hasNext()) {

        String line = inStream.nextLine();
        Scanner lineStream = new Scanner(line);

        while (lineStream.hasNext()) {
            String token = lineStream.next();
            if (token.matches("model") && lineStream.hasNextInt()) {
                int year= lineStream.nextInt();
                if ((year>= 1976) && (year <= 2013)) {
                    String tokenToken = (token + " " + year);

                    if (lineStream.hasNext(tokenToken)) {
                        System.out.println(line);
                    } else {
                    }

                }


            }
        }
        lineStream.close();

    }
    inStream.close();
}
4

1 に答える 1

0

まず、どこから int を取得しますか??

lineStream.hasNextInt()

?? どこでも見えるのは文字列だけです。

編集:これは、文字列を分割して正しく処理するという点で、あなたが探しているものだと思います。

Scanner input = new Scanner(System.in);
    String name = input.nextLine();

    String[] parts = name.split(" ");
    String part1 = parts[0];
    String part2 = parts[1];

    int year = Integer.parseInt(part2);      
    if(part1.contains("model")){            
        if((year >= 1976) && (year <= 2013)){
            System.out.println(name);
        }else{
            System.out.println("wtf?");
        }
    }
}

今、あなたがしなければならないことは、それを希望する時間/サイズのループに入れるだけです

于 2013-09-15T17:06:27.250 に答える