2013-07-11 2 views
0

Я пытаюсь построить массив из пользовательского ввода чисел. Мне удалось вычислить все, кроме min и max. В приведенном ниже коде всегда появляется первый номер ввода пользователем как минимальный, так и макс. Любые предложения о том, как исправить было бы весьма признателен:Получение Min и Max из массива

Scanner in=new Scanner (System.in); 
     int num[]=new int[5]; 
     int average=0; 
     int i=0; 
     int sum=0; 

     for (i=0;i<num.length;i++) { 
      System.out.println("enter a number"); 
      num[i]=in.nextInt(); 
      sum=sum+num[i]; 
      int min=num[0]; 
      int max=num[0]; 
      if (num[i]<min) { 
      min=num[i]; 
      } 
      if (num[i]<max) { 
      max=num[i]; 
     } 

     average=sum/6; 
     System.out.println("Average="+ average); 
     System.out.println("Min="+ min); 
     System.out.println("Max="+ max); 
     System.out.println("Sum="+ sum); 
+0

"если (число [я] <макс) {макс = NUM ​​[я];}" должен be "if (num [i]> max) {max = num [i];}" ??? – mmirwaldt

+1

Этот код даже не компилируется, так как 'min' и' max' объявляются внутри цикла и используются вне его. –

+0

Почему бы не ввести всю информацию в массив, а затем отсортировать ее? Концами вашего массива будут ваши min и max. –

ответ

2

Ваш код является неправильным. Вот немного улучшилось одно:

Scanner in=new Scanner (System.in); 
double num[]=new double[5]; 
double average=0; 
int i=0; 
double sum=0; 

double min = Double.MAX_VALUE; 
double max = Double.MIN_VALUE; 

for (i=0;i<num.length;i++) { 
    System.out.println("enter a number"); 
    num[i]=in.nextDouble(); 
    sum=sum+num[i]; 
    if (num[i]<min) { 
     min=num[i]; 
    } else if (num[i] > max) { 
     max=num[i]; 
    } 
} 

average=sum/num.length; 
System.out.println(String.format("Average=%.3d", average)); 
System.out.println(String.format("Min=%.3d", min)); 
System.out.println(String.format("Max=%.3d", max)); 
System.out.println(String.format("Sum=%.3d", sum)); 

Кроме того, я заменил Интс с двойниками, как вы хотели :)

+0

'sum' должен быть двойным или умножить его на' 1.0' при вычислении 'average' (что также должно быть' double'). Кроме того, при печати «двойных» переменных лучше использовать 'String # format' и'% .3d' для получения значимого результата. –

+0

"' sum' должно быть удвоено или умножить его на '1.0' при расчете' average' '- да? Я делаю это 'double' (' (double) sum'), этого должно быть достаточно :) – m4tx

+0

В любом случае, вы его не добавили или не исправили после комментариев = \ –

3
 int min=num[0]; 
     int max=num[0]; 

Перемещение мин и макс из для цикла.

int min = Integer.MAX_VALUE, 
     max = Integer.MIN_VALUE; 

Минимальные и максимальные, если блоки должны быть в обратном порядке.

А средняя должна быть рассчитана как:

average = sum/num.length; 

Остерегайтесь средних усекается из-за Интс

0
int min,max;min=max=min[0]; 
     for (i=0;i<num.length;i++) { 
       System.out.println("enter a number"); 
       num[i]=in.nextInt(); 
       sum=sum+num[i]; 
       if (num[i]<min) { 
       min=num[i]; 
       } 
       if (num[i]<max) { 
       max=num[i]; 
      } 

Помимо этого есть много других проблем в вашем коде

1.Move min и max снаружи для петли

2.Use Double/Float для хранения среднего значения с использованием int приведет к усечению результата.

1

пребывания Ошибка здесь:

int min=num[0]; 
int max=num[0]; 

Этот код должен находиться вне контура для {}.

+0

И вы должны инициализировать 'min' с большим значением и' max' с низким значением. –

2

Объявить минимальное и максимальное из диапазона цикла.

int min =Integer.MAX_VALUE; 
int max= Integer.MIN_VALUE; 
double average = 0D; 
     for(..){ 

     if (num[i] > max) { // this is the condition you have to put 
     max=num[i]; 
     } 
    } 

    average= ((double)sum/num.length); 
    System.out.printf("Average is %.2f \n",average);//to print with 2 decimals 
+0

Это даже не близко к ответу. Кстати, если 'min' является более низким значением, чем пользовательский ввод, он никогда не изменится. –

+0

@ LuiggiMendoza? Зачем ?xD – nachokk

+0

См. [Что является приемлемым ответом?] (http://meta.stackexchange.com/a/118694/182862), раздел 10. Кроме того, он попадает в ту же проблему, что и [этот ответ] (http: // stackoverflow.com/a/17598719/1065197) (но похоже, что upvoters даже не проверяет код перед голосованием). –

0

Вы должны объявить переменные min и max перед циклом. Если вы находитесь в первом цикле (i = 0), вы можете назначить его. Иначе вы сравниваете это. Что-то вроде этого:

Scanner in=new Scanner (System.in); 
    int num[]=new int[5]; 
    int average=0; 
    int i=0; 
    int sum=0; 
    int min; 
    int max; 

    for (i=0;i<num.length;i++) { 
     System.out.println("enter a number"); 
     num[i]=in.nextInt(); 
     sum=sum+num[i]; 
     if(i==0) { 
      min=num[0]; 
      max=num[0]; 
     } else { 
      if (num[i]<min) { 
       min=num[i]; 
      } 
      if (num[i]<max) { 
       max=num[i]; 
      } 
     } 
    } 

    average=sum/6; 
    System.out.println("Average="+ average); 
    System.out.println("Min="+ min); 
    System.out.println("Max="+ max); 
    System.out.println("Sum="+ sum); 
0

Вы можете использовать сортировки.

List<Integer> foo = Arrays.asList(5, 6, 7); 
Collections.sort(foo); 
System.out.println("max=" + foo.get(foo.size()-1)); 
System.out.println("min=" + foo.get(0)); 

Если включить некоторые библиотеки Apache, вы можете использовать свои вещи, такие как:

System.out.println(NumberUtils.max(new int[]{5,6,7})); 
Смежные вопросы