当我们在程序中输入0时,它应该停止运行循环并打印数字的平均值。当我运行程序并最初输入0时,程序退出。如果我先输入一个非零的整数,然后输入0,程序将继续运行,我无法退出。我认为当用户输入程序的新值时,整数值需要更新退出,总和是正确的。
如何在循环运行时更新整数值?我应该在循环中改变或添加一些我猜的东西。
import java.util.Scanner;
public class Exercise05_01 {
public static void main(String[] args){
float negCount = 0;
float sum = 0;
float posCount = 0;
Scanner input = new Scanner(System.in);
System.out.println("Enter a positive or negative integer. Entering 0 ends program");
int integer = input.nextInt();
while (integer != 0) {
if (integer > 0) {
posCount = +1;
sum = +integer;
}
if (integer < 0) {
negCount = +1;
sum = +integer;
}
float count = negCount + posCount;
if (integer == 0) {
System.out.println("The answer");
}
}
}
}
答案 0 :(得分:2)
有两个问题。
首先,当你在循环中时,你没有得到任何输入。这可以通过Lunchbox早先提供的建议来解决。
其次,这不会累积价值:
posCount = +1;
每次都为posCount
分配一个正数。
您想要增加值...
posCount++;
...或明确添加一个。
posCount += 1;
答案 1 :(得分:1)
我认为您需要添加在while循环中输入的行。
while (integer != 0) {
integer = input.nextInt();
.
.
.
这样循环运行时,每次迭代都会检查输入是否仍然存在。
另外我不得不说这看起来很像家庭作业......特别是班级名字......
答案 2 :(得分:1)
正如Lunchbox在他的回答中指出的那样,你需要从循环内部请求用户输入,否则integer
永远不会改变,你永远不会退出你的循环;你正在观察的行为是永远运行的程序。
最好的方法是午餐盒的建议:
int integer = input.nextInt();
while(integer != 0){
// Do stuff
integer = input.nextInt();
}
但是,您的代码还有许多其他问题。首先,为什么使用float
来存储您的计数器和总和值?为什么不使用int
s?
另一方面,您实际上从未实际增加这些值。正如Makoto在他的回答中指出的那样,行posCount = +1
不是增量运算符。
在这种情况下,+
运算符是unary plus operator。这样做会强制您的签名值为正,所以+(-1) == 1
。虽然这很有用,但它并不是你想要发生的事情,而且它绝对并不是你想要做的事情。
相反,您希望执行以下三项操作之一:
posCount = posCount + 1;
posCount += 1;
posCount++;
这些都是等同的陈述。 ++
运算符是后缀增量运算符,它将变量的值加1然后返回它(它稍微复杂一点,但你可以在你自己的时间读取它)。所以不要使用这种语法作为你的总和;使用另外两个中的一个。