2015-09-03 2 views
-4
public class ArrayCalculations 
    { 
     public static void main(String[] args) 
     { 

     int sum = 0, smallest, largest; 
     double average; 
     int[] array = new int[20]; 

     for(int i = 0; i < array.length; i++) 
     { 

      array[i] = (int)(Math.random() * 500 + 1); 
      System.out.println(array[i]); 
      sum += array[i]; 
      smallest = array[0]; 
      largest = array[]; 
      if(array[i]<smallest) 
      { 
       smallest = array[i]; 
      } 
      if(array[i]>largest) 
      { 
      largest = array[i]; 
      } 

     } 
     average = 1.0*sum/array.length; 

     System.out.println("Sum: " + sum); 
     System.out.println("Average: " + average); 
     System.out.println("Smallest: " + smallest); 
     System.out.println("Largest: " + largest); 
     } 
    } 

Он продолжает говорить, что наименьшее и наибольшее не могло быть инициализировано. Я не уверен, как это исправить. Я попытался установить наименьшее и наибольшее значение для первого числа за пределами цикла for, но это было до того, как все числа в массиве были инициализированы так, чтобы они не работали ...Как вы находите максимум и минимум для случайного массива?

+0

Похоже, что вы пишете некоторые Java, а затем начал после яваскрипта вручную на полпути через 'Math.random' является Java-функция, но' System.out.println («Сумма:» + сумма); 'выглядит как java – andrew

+0

@andrew:' Math.random' существует и на Java. – Makoto

+0

@Makoto, ок, спасибо, я сделал для этого Google, но не нашел его, довольно долгое время с тех пор, как я использовал java – andrew

ответ

2

Вы в основном сбросили значения smallest и largest к первому элементу цикла for (с учетом largest = array[] - ошибка ввода).

Да, вы должны инициализировать их вне цикла.

smallest = Integer.MAX_VALUE; 
largest = Integer.MIN_VALUE; 
for(int i = 0; i < array.length; i++) { 
    array[i] = (int)(Math.random() * 500 + 1); 
    System.out.println(array[i]); 
    sum += array[i]; 
    if(array[i] < smallest) smallest = array[i]; 
    if(array[i] > largest) largest = array[i]; 
} 
1
 largest = array[]; 
        ^^^^^^^ 

Почему вы делаете largest массив, а затем пытается рассматривать его как простое целое число?

 if(array[i]>largest) 
      ^^^^^^^^----integer 
        ^^^^^^^---array 

Лучше структура была бы

array[0] = (int)(Math.random() * 500 + 1); 
     ^---note 0 index 
largest = array[0]; 
smallest = array[0]; 

for(i = 1; ...) { 
     ^--start at index #1 
    array[i] = (int)(Math.random() * 500 + 1); 
    if (array[i] < smallest) { 
    smallest = array[i]; 
    } 
    if (array[i] > largest) { 
    largest = array[i]; 
    } 
} 

В основном, делают инициализации за пределами цикла.

2

Есть две проблемы:

  • Внутри метода (как main), вы не отпуска переменные инициализирован, которые вы собираетесь использовать позже. Причина, по которой Java не инициализирует эти переменные, связана с возможностью пропуска цикла; хотя в этом сценарии маловероятно, Java считает, что это все еще возможно.

  • Наибольшее значение, которое вы когда-либо видели в этом списке, является отрицательной бесконечностью, а наименьшее значение, которое вы когда-либо видели в этом списке, - бесконечность (то есть вы не знаете точно, где он может скрываться) , Инициализируйте эти две переменные наименьшим и самым большим значением, которое вы можете.

    int sum = 0, smallest = Integer.MAX_VALUE, largest = Integer.MIN_VALUE; 
    
+0

+1. Это правильный ответ, но я думаю, что имеет смысл инициализировать переменные «null» и проверять «null» перед печатью значений. – Rainbolt

+0

@Rainbolt: Вы не можете инициализировать примитив «null». Вы думаете о 'Integer' вместо этого? Или вы думаете, что они * действительно * должны рассматриваться как массив? Кроме того, как бы «null» помогал даже *, если бы они были «Integer»? Какое числовое значение удерживается? ;) – Makoto

+0

Упс, моя ошибка. Любое значение дозорного значения вне пределов того, что может произвести его случайный генератор, может работать (например, -1 будет работать нормально, потому что похоже, что его генератор генерирует только от 0 до 500). Я не знаю, почему вы спрашиваете, какое числовое значение имеет значение «null». Null не имеет числового значения ... – Rainbolt

Смежные вопросы