从双数组中获取最小值不起作用
Getting minimum value from double array not working
我正在尝试从双精度数组中获取最小值和最大值。最大值工作正常,但是,最小值似乎总是为零。获得最小值的最佳方法是什么?请注意,我在本练习中不能使用 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);
}
}
问题出在这一行:
double minimum = inputHolder[inputCounter];
Java 将新变量和新数组的所有元素初始化为 0 值。 See here.
所以默认情况下,您的 minimum
变量设置为 0,如果您的数组的值大于 0,您的 minimum
变量将不会更新,因为 0 小于所有其他正值.
您需要做的是将它设置为一个非常大的值,例如 99999,或者您可以使用 Double.MAX_VALUE
,这将为您提供 double 可以存储的最大值。
我会使用 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);
除了初始化变量minimum
,一切似乎都正常。在inputHolder[inputCounter] = scnr.nextDouble();
语句
之后的while循环中初始化它
inputHolder[inputCounter] = scnr.nextDouble();
if (inputCounter == 0) minimum = inputHolder[inputCounter];
希望这能解决您的问题。
我正在尝试从双精度数组中获取最小值和最大值。最大值工作正常,但是,最小值似乎总是为零。获得最小值的最佳方法是什么?请注意,我在本练习中不能使用 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);
}
}
问题出在这一行:
double minimum = inputHolder[inputCounter];
Java 将新变量和新数组的所有元素初始化为 0 值。 See here.
所以默认情况下,您的 minimum
变量设置为 0,如果您的数组的值大于 0,您的 minimum
变量将不会更新,因为 0 小于所有其他正值.
您需要做的是将它设置为一个非常大的值,例如 99999,或者您可以使用 Double.MAX_VALUE
,这将为您提供 double 可以存储的最大值。
我会使用 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);
除了初始化变量minimum
,一切似乎都正常。在inputHolder[inputCounter] = scnr.nextDouble();
语句
inputHolder[inputCounter] = scnr.nextDouble();
if (inputCounter == 0) minimum = inputHolder[inputCounter];
希望这能解决您的问题。