2013-09-25 44 views
2

我正在尝试加入从用户输入中获取最大最小值的功能,但似乎无法使其工作。我尝试了一个while循环,但不知道如何真正存储最小值和最大值。在我的while循环中包含最小值和最大值检查器?

public class examReview 
{ 
    public static void main (String[]args) 
    { 
     Scanner input = new Scanner(System.in); 
     int numOfInputs=0; 
     int currentMax 
     int currentMin=0; 
     double sum=0; 
     int intInput = 1; 
     int num; 

     while (intInput != 0) 
     { 
      intInput = input.nextInt(); 

      currentMin = intInput; 
      currentMax = intInput; 
      System.out.println("currentminis" + currentMin); 
      System.out.println("currentmaxis" + currentMax); 

      sum += intInput; 
      numOfInputs++; 
     } 

     System.out.println(numOfInputs - 1);  //Prints number of input 
     System.out.println(sum);     //Prints sum of all values entered 
     System.out.println(sum/(numOfInputs-1)); //Prints average 
     System.out.println(currentMin); 
    } 
} 
+0

问题的一部分是什么int currentMax?这就是为什么你放弃了分号?顺便说一句,没有像“if循环”这样的事情 – doctorlove

+0

我真的不知道你是在谈论if语句还是while循环。我假设后者。 – Dukeling

+0

[Java Input and Out put]的可能重复(http://stackoverflow.com/questions/18934475/java-input-and-out-put) –

回答

0

您目前改变currentMincurrentMax每轮while循环。
显然这些需要设置在循环之外。

int currentMax=Integer.MIN_VALUE; 
    int currentMin=Interger.MAX_VALUE; 

,并调整为所需的while循环

while (intInput != 0) 
    { 
     intInput = input.nextInt(); 

     if(intInput<currentMin) currentMin = intInput; 
     if(intInput>currentMax) currentMax = intInput; 
     System.out.println("currentminis" + currentMin); 
     System.out.println("currentmaxis" + currentMax); 

     sum += intInput; 
     numOfInputs++; 
    } 
+0

您可以将zero用于'currentMax',因为在这种情况下这是绝对最小值。你也可以使用'Math.max'和'Math.min'来整理代码。 –

+0

@BoristheSpider为什么绝对最小零? – doctorlove

+0

由于'intInput!= 0'(我认为应该是'intInput> 0')。 –

0
while (intInput != 0) 
    { 
    intInput = input.nextInt(); 

    if(numOfInputs==0 || intInput<currentMin)currentMin = intInput; 
    if(numOfInputs==0 || intInput>currentMax)currentMax = intInput; 
    System.out.println("currentminis" + currentMin); 
    System.out.println("currentmaxis" + currentMax); 

    sum += intInput; 
    numOfInputs++; 

    } 
+1

'flag'做什么? Java中没有将“1”计算为布尔值“true”。 – maksimov

+0

@maksimov国旗是愚蠢的...现在它消失了。 –

+0

这有点不雅,看看我的解决方案[这里](http://stackoverflow.com/a/18934505/2071828)。 –

0

汤姆正确的答案,你想测试你目前的{最小值,最大值}对intInput内:

if (intInput < currentMin) { 
     currentMin = intInput; 
} 

你可以通过将currentMin和currentMax分配给异常值来简化标志日志,并且只要您至少得到一个输入,由于您的平均值将被零除,就会导致问题,您应该 好。

int currentMax = Integer.MIN_VALUE; 
int currentMin = Integer.MAX_VALUE; 

这样任何值都会大于currentMax并且小于currentMin并且您可以摆脱该标志。

另请注意,平均值可能应该是sum/numOfInputs而不是sum/numOfInputs-1

+0

它是负1,因为输入的数量正在计入输入的最后0。 – Ryan

0

我想你已经写了太多的代码。你应该使用Java API:

试试这个:

public static void main (String[]args) { 
    Scanner input = new Scanner(System.in); 
    List<Integer> list = new ArrayList<Integer>(); 
    int sum = 0; 
    for (int i = input.nextInt(); i > 0; i = input.nextInt()) { 
     sum += i; 
     list.add(i); 
    } 

    System.out.println(list.size());   //Prints number of input 
    System.out.println(sum);     //Prints sum of all values entered 
    System.out.println(list.isEmpty() ? 0d ; sum/list.size()); //Prints average 
    System.out.println(Collections.min(list));//Prints min 
    System.out.println(Collections.max(list));//Prints max 
} 
+0

这将是做到这一点的方法,但我怀疑“不要使用数组来完成这个任务,即使你知道它们。”对于这个问题也是如此,因为它们[非常相似](http://stackoverflow.com/questions/18934475/java-input-and-output)。 –

+0

@BoristheSpider List列不是数组:) – Bohemian

+0

虽然理论上输入的大小是不确定的,但这可能是一个危险的方法。 – maksimov

0

您需要将您的最大值设置为最小值,并将您的最小值设置为最大值。然后在需要时进行比较和设置:

int currentMax = Integer.MIN_VALUE; 
int currentMin = Integer.MAX_VALUE; 

while(haveInput) { 
    if (intInput > currentMax) currentMax = intInput; 
    if (intInput < currentMin) currentMin = intInput; 
    // get more input 
} 
相关问题