LoginSignup
0
2

More than 5 years have passed since last update.

Scannerクラスの標準入力でハマったので記録

Posted at

hasNext()メソッドについて

Codeなんちゃらというクイズサイトに挑戦してみた。
下記はその時作った回答。
ScannerクラスでhasNext()メソッドではまってしまった。
標準入力をスキャンの対象として実行する時に、hasNext()関数は標準入力の最後にCtrl+zで入力をちゃんと終了させてあげないとfalseを返しません。よって、ちゃんと終了をしてあげないとループから抜け出ません。

これにずっと気付かないままかなり時間くった・・・。

以上

package questions;

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        int count = 1;
        int member = 0;
        String input = null;
        double resultAvgs[] = new double[12];

        try{
            Scanner scanner = new Scanner(System.in);

            // resultAvgs[]へ格納
            while(scanner.hasNext()){
                input = scanner.nextLine();
                resultAvgs[member] = calcAvrg(input);
                member += 1;
            }

            for(int i=0; i<member; i++){
                for(int j=0; j<member; j++){
                    if(i==j){
                        continue;
                    }else{
                        if(resultAvgs[i] >= resultAvgs[j]){
                            // 少ない値があれば順位を一つ落とす
                            count += 1;
                        }
                    }
                }
                System.out.println(count);
                // 初期化
                count = 1;
            }

            scanner.close();

        }catch(NullPointerException e){
            e.printStackTrace();
        }
    }

    // レース結果を読み込んで調和平均を算出
    static double calcAvrg(String in) {
        double total = 0;
        String[] results = in.split(" ", 0);

        for (String result : results) {
            double buff = 1 / Double.parseDouble(result);
            total += buff;
        }

        return results.length / total;
    }
}
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2