我正在尝试确定用户提供的每个输入是否是所有输入中的max
或min
,然后将该输入分配给变量high
或{{ 1}}
low
问题是我无法在不为其赋值的情况下声明变量(例如0)。例如,如果用户输入int inputnum = 0;
double sum = 0;
double lastinput = 0;
double high;
double low;
double average;
Scanner input = new Scanner(System.in);
high = 0;
low = 0;
do {
System.out.println("Enter a number. Type 0 to quit.");
lastinput = input.nextDouble(); //reads input
sum += lastinput; //add to sum
if (lastinput != 0) {
inputnum += 1; //counts number of inputs (except 0)
}
if (lastinput > high && lastinput != 0) {
high = lastinput;
}
if (lastinput < low && lastinput != 0) {
low = lastinput;
}
average = (sum / inputnum);
} while (lastinput !=0); //repeat unless user inputs 0
,3
和5
,7
值仍定义为low
。
答案 0 :(得分:2)
这是因为您将low
初始化为零,并且您输入的所有值都更大,因此永远不会更新。您必须将其分配给可能的最高值 - low = Double.MAX_VALUE;
,以便所有其他值都低于它。
同样,您应该将高位初始化为
high = Double.MIN_VALUE;
答案 1 :(得分:2)
问题出在以下情况:
if (lastinput < low && lastinput != 0) {
low = lastinput;
}
请注意,变量low
最初为0。因此,如果您的实际最小值高于0,那么它不会影响low
的值,因为它是0.可以有几个逻辑解决方案:
使用标记值:使用最高可能值double初始化为低,以便用户输入始终较低,因此会影响low
的值
double low = Double.MAX_VALUE;
更改if条件:您可以更改if
条件以说明初始值为0的事实。
if (low==0 || (lastinput < low && lastinput != 0)) {
low = lastinput;
}
答案 2 :(得分:1)
默认情况下,您应使用low
的最大值,否则非负输入的条件lastinput < low
将始终为false
,并且0仍为输出。
double low = Double.MAX_VALUE;
答案 3 :(得分:0)
low
和high
的值可以在循环之前通过您的第一个输入初始化。