Java: проблема с вычислением минимального значения, отсканированного из текстового файла
Программа, над которой я работаю, берет числа из простого текстового файла и выполняет вычисления на основе чисел. Одним из необходимых расчетов является общее минимальное значение.
Проблема заключается в том, что моя текущая переменная минимального балла установлена равной текущему выбранному значению из текстового документа. Таким образом, оно всегда будет равно последнему значению. Или, в качестве альтернативы, он всегда равен нулю, если я не устанавливаю два значения равными друг другу. Проблема в том, что я не знаю, как точно рассчитать минимальное значение.
Java-код
public class ExamStats {
static final int bottomA = 90;
static final int bottomB = 80;
static final int bottomC = 70;
static final int bottomD = 60;
public static void main(String[] args) throws FileNotFoundException {
double totalSum = 0;
int numberOfExams = 0;
double examAverage = 0;
int currentScore = 0;
double aCount = 0;
double bCount = 0;
double cCount = 0;
double dCount = 0;
double fCount = 0;
double aPercent = 0;
double bPercent = 0;
double cPercent = 0;
double dPercent = 0;
double fPercent = 0;
int maxScore = 0;
int minScore = 0;
Scanner scan = new Scanner(System.in);
File f = new File("Grades.txt");
DecimalFormat twoDecimal = new DecimalFormat("#.##");
DecimalFormat noDecimal = new DecimalFormat("#");
System.out.println("Enter the name of the file here: ");
String fileName = scan.nextLine();
Scanner fileLocation = new Scanner(new FileReader(fileName));
while (fileLocation.hasNext()){ //Reads each individual entry from the text file.
currentScore = fileLocation.nextInt();
numberOfExams++;
totalSum += currentScore;
if (currentScore >= bottomA){
aCount++;
}
if (currentScore >= bottomB && currentScore < bottomA){
bCount++;
}
if (currentScore >= bottomC && currentScore < bottomB){
cCount++;
}
if (currentScore >= bottomD && currentScore < bottomC){
dCount++;
}
if (currentScore < bottomD) {
fCount++;
}
if (currentScore < minScore){
minScore = currentScore;
}
if (currentScore > maxScore){
maxScore = currentScore;
}
2 ответа
Проблема в том, что вы устанавливаете минимальный балл для текущего балла на каждой итерации цикла со строкой
minScore = currentScore;
Если вы измените программу так, чтобы эта строка выполнялась только один раз, перед циклом. Это также означает, что вам придется проверить, что на самом деле есть данные, прежде чем делать это.
Хотя это будет работать для неотрицательных чисел, возможно, стоит поставить строку maxScore = currentScore
там же, чтобы избежать проблем, если все баллы меньше 0.
Изменить: следующий код "должен" делать то, о чем я говорю, но, вероятно, есть лучшие способы его реализации
//Rest of your program
System.out.println("Enter the name of the file here: ");
String fileName = scan.nextLine();
Scanner fileLocation = new Scanner(new FileReader(fileName));
if (fileLocation.hasNext()) {
currentScore = fileLocation.nextInt();
minScore = currentScore;
maxScore = currentScore;
} else {//Throw an error or something
}
// Rest of the program
Затем вам придется немного изменить цикл, чтобы приспособиться к этому. Смена цикла на пост-тестовый и перемещение строки currentScore = fileLocation.nextInt();
до последней строки цикла будет один из способов заставить его работать.
minScore присваивается currentScore
minScore = currentScore;
Затем он сравнивается, но обе переменные будут иметь одинаковое значение, условие никогда не будет истинным
if (currentScore < minScore){
minScore = currentScore;
}
Удалить назначение до if
и программа будет работать как положено.