我正在尝试编写一个可能具有无限数量值的Java程序 - 一旦用户输入负数,程序就会停止,计算所有输入数字的平均值(不包括负数)和打印出输入的数量(再次,不是负数)以及平均值。
以下是我目前的代码。当我尝试运行程序时,它没有正确计算平均值,你必须输入几个连续的负数才能最终停止程序。
为了测试算术和程序的其余部分,我插入了一个语句,如果输入“负”字而不是负数,它将关闭程序。什么时候这样做,平均值和数量以及其他所有工作就像它所做的那样。基本上,当我尝试在负数后停止程序时,问题就开始发生了。
我是一名初学程序员,这让我疯狂了几个小时。任何帮助是极大的赞赏!
import java.util.*;
import java.lang.Math;
import java.io.IOException;
import java.io.InputStream;
public class Average
{
public static void main(String[] args)
{
Scanner numInput = new Scanner(System.in);
double avg = 0.0;
double count = 0.0;
double sum = 0.0;
System.out.println("Enter a series of numbers. Enter a negative number to quit.");
while (numInput.hasNextDouble())
{
double negNum = numInput.nextDouble();
if (negNum >= 0)
{
sum += numInput.nextDouble();
count++;
avg = sum/count;
}
else
{
System.out.println("You entered " + count + " numbers averaging " + avg + ".");
break;
}
}
}
}
答案 0 :(得分:1)
您应该使用:sum+=negNum;
代替sum += numInput.nextDouble();
就像现在一样,你的程序读取一个数字,如果它不是负数,它会读取另一个数字并将其添加到sum
。
此外,您应该只在else
块中计算一次平均值。
答案 1 :(得分:0)
您正在阅读一个新号码来计算sum
。
应该是
sum += negNum;
答案 2 :(得分:0)
您已收到用户在行中输入的号码:
double negNum = numInput.nextDouble();
您应该将此号码本身添加到sum
,而不是再次拨打numInput.nextDouble()
向用户请求其他号码。所以固定代码是:
public static void main(String[] args){
Scanner numInput = new Scanner(System.in);
double avg = 0.0;
double count = 0.0;
double sum = 0.0;
System.out.println("Enter a series of numbers. Enter a negative number to quit.");
while (numInput.hasNextDouble())
{
double negNum = numInput.nextDouble();
if (negNum >= 0)
{
sum += negNum;
count++;
avg = sum/count;
}
else
{
System.out.println("You entered " + count + " numbers averaging " + avg + ".");
break;
}
}
}
示例运行
Enter a series of numbers. Enter a negative number to quit.
2
3
-1
You entered 2.0 numbers averaging 2.5.
答案 3 :(得分:0)
更改
function
到
sum += numInput.nextDouble(); // reading next value again