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;
}
}