Сканер файлов считывает только последнее число в файле

#java #file

#java #файл

Вопрос:

Вот код:

 Scanner fileRead = new Scanner(file);

        while (fileRead.hasNext()) {
            score = (fileRead.nextInt());
        } 

        if (score >= 90) {
            gradeA  ; 
            scores  ;
        }   else if (score >=80) {
            gradeB  ; 
            scores  ;
        }   else if (score >= 70) {
            gradeC  ; 
            scores  ;
        }   else if (score >= 60) {
            gradeD  ; 
            scores  ;
        }   else if (score >= 50) {
            gradeF  ;
            scores  ;
        }   else if (score >100 || score <0) {
            uCount  ; 
        }   
  

Предполагается, что я должен вычислять среднее значение баллов, подсчитывая, сколько их в каждой буквенной оценке. Проблема в том, что он считывает только последнее число вместо ~ 80 разных чисел.

Комментарии:

1. else if (score >100 ...) это условие будет выполнено в первом случае, if (score >= 90)

2. На самом деле он считывает все оценки. Вы присваиваете их одной и той же переменной.

Ответ №1:

Ваша логика if-else не выполняется до тех пор, пока цикл while не завершится и весь файл не будет обработан. Это означает, что будет сохранен только последний int score .

Перемещение закрывающей скобки цикла while должно устранить эту проблему

Ответ №2:

Вам нужно ввести условие if else внутри цикла while.

 Scanner fileRead = new Scanner(file); 
while (fileRead.hasNext()) {
score = (fileRead.nextInt());  
if (score >= 90) { 
gradeA  ; 
scores  ; 
} 
else if (score >=80) { 
gradeB  ; 
scores  ; 
} else if (score >= 70) {
 gradeC  ; 
scores  ; 
} else if (score >= 60) { 
gradeD  ; 
scores  ; 
} else if (score >= 50) {
 gradeF  ; 
scores  ; 
} else if (score >100 || score <0) {
 uCount  ; 
}
}