2013-09-25 4 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 loop» – doctorlove

+0

Я действительно не знаю, говорили ли вы об if-statement или while-loop. Я принял последний. – Dukeling

+0

Возможный дубликат [Java Input and Out put] (http://stackoverflow.com/questions/18934475/java-input-and-out-put) –

ответ

0

Вы в настоящее время изменения currentMin и currentMax каждый раз вокруг цикла.
Очевидно, что они нуждаются в настройке вне цикла.

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

и корректировки в соответствии с требованиями внутри время цикла

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

Вы можете использовать ноль для '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

Что делает 'флаг'? '1' не вычисляется в логическом 'true' в Java. – maksimov

+0

@ флагмаксимов был тупой ... теперь его нет. –

+0

Это несколько неэлегантно, взгляните на мое решение [здесь] (http://stackoverflow.com/a/18934505/2071828). –

0

Том правильный ответ, вы хотите, чтобы проверить текущее {Min, Max} против intInput:

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

You может упростить журнал флага, присвоив currentMin и currentMax значениям outlier и до тех пор, пока вы получите хотя бы один вход, что уже привело бы к проблеме, так как ваше среднее значение было бы делением на ноль, вы должны быть ОК.

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

Таким образом, любое значение будет больше, чем currentMax и меньше currentMin, и вы можете избавиться от флага.

Также обратите внимание, что в среднем должно быть sum/numOfInputs, а не sum/numOfInputs-1.

+0

Это минус 1, потому что количество входов подсчитывает введенное значение 0. – Ryan

0

Думаю, вы написали слишком много кода. Вы должны использовать Java API:

  • Используйте List<Integer> держать весь ваш ввод
  • Используйте list.size() для автоматического отслеживания количества цифр
  • Использование Collections.min(list) и Collections.max(list) найти мин/макс

Попробуйте это:

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-out-put). –

+0

@BoristheSpider «Список» не является массивом :) – 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 
} 
Смежные вопросы