Получение минимального значения из двойного массива не работает - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь получить минимальное и максимальное значения из массива значений типа double.Максимальное значение работает нормально, однако минимальное значение всегда кажется равным нулю.Каков наилучший способ получить минимальное значение?Обратите внимание, что я не могу использовать цикл for в этом упражнении, но цикл while.

public class LoopingFloats {

    public static void main(String[] args) {
        double[] inputHolder = new double[5];
        int inputCounter = 0;
        double total = 0.0d;
        double average = 0.0d;
        double maximum = 0.0d;
        double minimum = inputHolder[inputCounter];
        double interestRate = 0.20d;
        double interestAmount = 0.0d;

        Scanner scnr = new Scanner(System.in);

        while(inputCounter <= 4){
            System.out.println("Enter number " + (inputCounter + 1) + ": ");
            inputHolder[inputCounter] = scnr.nextDouble();

            if(inputHolder[inputCounter] >  maximum){
                maximum = inputHolder[inputCounter];
            }
            if(inputHolder[inputCounter] <  minimum){
                minimum = inputHolder[inputCounter];
            }

            total = total + inputHolder[inputCounter];

            inputCounter += 1;

        }

    }

        average = total / 5;
        interestAmount = total * interestRate;

        System.out.println("Total: " + total);
        System.out.println("Average: " + average);
        System.out.println("Maximum: " + maximum);
        System.out.println("Minimum: " + minimum);
        System.out.println("Interest for total at 20%: " + interestAmount);
    }

}

Ответы [ 3 ]

1 голос
/ 14 мая 2019

Проблема в этой строке:

double minimum = inputHolder[inputCounter];

Java инициализирует новые переменные и все элементы нового массива 0 значениями. Смотри здесь.

Таким образом, по умолчанию ваша переменная minimum установлена ​​в 0, и если ваш массив имеет значения больше 0, ваша переменная minimum не будет обновлена, поскольку 0 меньше всех других положительных значений.

Вам нужно будет установить очень большое значение, например 99999, или вы можете использовать Double.MAX_VALUE, который даст вам максимальное значение, которое может хранить двойное число.

0 голосов
/ 14 мая 2019

Все выглядит нормально, кроме инициализации переменной minimum. Инициализируйте его в цикле while после оператора inputHolder[inputCounter] = scnr.nextDouble();

inputHolder[inputCounter] = scnr.nextDouble();
if (inputCounter == 0) minimum = inputHolder[inputCounter];

Надеюсь, это решит вашу проблему.

0 голосов
/ 14 мая 2019

Я бы использовал DoubleSummaryStatistics, который включает в себя всю необходимую информацию (я бы также предпочел форматированный IO).Как

double[] inputHolder = new double[5];
double interestRate = 0.20;
Scanner scnr = new Scanner(System.in);
int i = 0;
while (i < 5) {
    System.out.printf("Enter number %d: ", i + 1);
    inputHolder[i] = scnr.nextDouble();
    i++;
}
DoubleSummaryStatistics dss = Arrays.stream(inputHolder).summaryStatistics();
System.out.printf("Total: %.2f%n", dss.getSum());
System.out.printf("Average: %.2f%n", dss.getAverage());
System.out.printf("Maximum: %.2f%n", dss.getMax());
System.out.printf("Minimum: %.2f%n", dss.getMin());
System.out.printf("Interest for total at 20%%: %.2f%n", dss.getSum() * interestRate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...