2017-09-22 59 views
3

我想确定每个用户提供的输入是maxmin他们的所有输入,然后将该输入指定给一个变量highlow需要帮助确定用户输入的最大和最小

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 

的问题是,我不能没有分配给它的值(例如0)声明变量。如果用户输入357例如low值仍然定义为0

回答

2

问题是与您的以下条件:

if (lastinput < low && lastinput != 0) { 
    low = lastinput; 
} 

注意,变量low为0开始。所以,如果你的实际最小为大于0,则不会影响low的价值,因为它是0.可以有多个逻辑的解决方案,这一点:

  1. 使用哨兵值:初始化低配双可能的最高值,使得用户输入始终较低,因此影响low

    double low = Double.MAX_VALUE; 
    
  2. 变化的值,如果条件:你可以改变if条件以考虑的事实,初始值是0。

    if (low==0 || (lastinput < low && lastinput != 0)) { 
        low = lastinput; 
    } 
    
+1

如果没有给出输入,第二种解决方案也将摆脱第一种解决方案的奇怪行为(在这种情况下,第一种解决方案将具有“低”>“高”)。 +1 –

+0

是@JiriTousek。但是,这只是一个角落案例,可以照顾程序员也想要的任何方式。它从编码器到编码器。 – 97amarnathk

2

那是因为你intialize low到零,您输入的所有值都较大,所以它永远不会被更新。您必须将其分配给可能的最高值 - low = Double.MAX_VALUE;,因此所有其他值都会低于此值。

同样,你应该初始化高达

high = Double.MIN_VALUE; 
+1

'double'它:) – nullpointer

+2

@nullpointer好,谢谢:) – TDG

+0

多个测试案例,这个工程完全按照我的期望。然而,当我输入“-1”,“-2”,“3”,然后“0”,我的最小值被显示为“4.9E-324”。这是什么原因造成的? – bigfacts

1

您应该使用的最大值为low默认或者用于非负投入的条件lastinput < low将始终是false和0仍然是你的输出。

double low = Double.MAX_VALUE; 
0

lowhigh的值可以由您的第一输入你的循环前可。