当我运行此代码并输入总和> 100的数字时,输出对于计数和总和是正确的但平均值是错误的。例如;输入8,10,99 ...计数为3,总和为117,应返回平均值39 ...返回的实际输出为计数3,总和117和平均值58.5。我已经意识到这是因为平均值是使用2而不是3来计算(或者总是比使用不同值的值少一个)。为什么是这样?它适用于输入和<= 100。请帮助:))
public static void main(String[] args) {
//Use Main Method for gathering input
float input = 1;
// Declare variable for sum
float theSum = 0;
// Declare variable for average
float average = 0;
// Declare variable for counting the number of user inputs
int counter = 0;
/* Initialize the while loop using an input of 0 as a sentinel value
* to exit the loop*/
while (input != 0) {
// Use JOptionPane method to accept input from user
input = Float.parseFloat(
JOptionPane.showInputDialog(
null, "Please enter a number. Enter 0 to quit: "));
// Invoke sum method and pass input and summation to sum method
theSum = (sum(input, theSum));
// Invoke avg method and pass summation and counter to avg
average = (avg(theSum, counter));
// Increment the counter variable
counter++;
if (theSum > 100)
{
JOptionPane.showMessageDialog(null, "The sum of your numbers "
+ "are greater than 100!");
break;
}
}
// Invoke display method and pass summation, average, and counter variables to it
display(theSum, average, counter);
}
public static float sum(float num1, float sum) {
//Add the user's input number to the sum variable
sum += num1;
//Return value of sum variable as new summation variable
return sum;
}
public static float avg(float num1, int num2) {
//Declare and initialize variable for average
float average = 0;
//Calculate average
average = num1 / num2;
//Return value of average variable
return average;
}
public static void display(float sum, float average, int counter) {
/* I am subtracting 1 from variable counter so as not to include the sentinel value
* of 0 that the user had to enter to exit the input loop in the overall count*/
// Display the count, sum, and average to the user
if (sum > 100) {
JOptionPane.showMessageDialog(null, "Count = " + (counter) + ", Sum = " + sum + ", Average = " + average);
}
if (sum <= 100) {
JOptionPane.showMessageDialog(null, "Count = " + (counter - 1) + ", Sum = " + sum + ", Average = " + average);
}
}
}
答案 0 :(得分:1)
在取平均值后递增计数器,这就是为什么你会看到基于2个数字而不是预期值3的平均值。
average = (avg(theSum, counter));
// Increment the counter variable
counter++;
交换这两个并在取平均值之前递增计数器。
counter++;
// Increment the counter variable
average = (avg(theSum, counter));
修改强>
以下是您应该更改的内容:
首先,仅在输入不是= 0
时才更新计数器 if(input!=0)
{
counter++;
}
其次,将平均代码移出循环,并在显示之前将其放在最后,不需要反复计算平均值。
average = (avg(theSum, counter));
display(theSum, average, counter);
第三,从counter-1
方法移除display
并打印counter
public static void display(float sum, float average, int counter) {
JOptionPane.showMessageDialog(null, "Count = " + (counter) + ", Sum = " + sum + ", Average = " + average);
}
之后,它适用于您期望的两种情况