2013-12-09 4 views
0

Вот мой код, и он отлично работает.Вопросы о массиве

import java.util.Random; 
class apples 
{ 
    public static void main(String args[]) 
    { 
     Random rand = new Random(); 
     int frequency[] = new int[7]; 

     for(int roll = 1;roll < 1000;roll++){ 
      ++frequency[1+rand.nextInt(6)]; 
     } 

     System.out.println("Face\tFrequency"); 

     for(int face = 1;face < frequency.length;face++){ 
      System.out.println(face + "\t" + frequency[face]); 
     } 
    } 
} 

Я не понимаю эту строку кода

++frequency[1+rand.nextInt(6)]; 

Когда я снял «++» оператора, он не мог быть собран. Я знаю, что он добавит 1 к номерам randon, порожденным от 0 до 5, но почему перед частотой существует «++»? Почему необходимо разместить там оператор «++»?

+1

Какая ошибка? – Paperwaste

+0

Вероятно, это было просто предупреждение, что утверждение ничего не делает; не ошибка компилятора. Если вы можете запустить программу, это не ошибка, а предупреждение. – AndyG

ответ

3

Оператор ++ увеличивает частоту по указанному индексу. В этом случае, это то же самое, как говорят:

for(int roll = 1;roll < 1000;roll++){ 
    int index = 1+rand.nextInt(6); 
    frequency[index] = frequency[index] + 1; 
} 

Удаление оператора ++, вы остались:

for(int roll = 1;roll < 1000;roll++){ 
    frequency[1+rand.nextInt(6)]; 
} 

frequency[1+rand.nextInt(6)] Линия не имеет смысла; это не операция, она ничего не делает.


EDIT:

Может быть, лучше иллюстрации: пусть x быть значение ищется в frequency массиве. Тогда оригинал эквивалентно:

for(int roll = 1;roll < 1000;roll++){ 
    int x = frequency[1+rand.nextInt(6)]; 
    ++x; // Equivalent to "x = x + 1" 
} 

Принимая во внимание, если вы удалите оператор инкремента, ваш полученный цикл будет:

for(int roll = 1;roll < 1000;roll++){ 
    int x = frequency[1+rand.nextInt(6)]; 
    x; // ...what? 
} 
0

Оператор без ++ смотрит на содержимое массива, но ничего не делает со значением. Добавление оператора ++ говорит ему увеличивать найденное там значение.

Возможно, вы думаете, что frequency[1+rand.nextInt(6)] добавляет значение в массив. Это не. Он ищет местоположение в памяти из случайного местоположения.

0

++ является обобщающим для

int i = 1+rand.nextInt(6); 
frequency[i] = frequency[i] + 1; 

Удаления это вызывает никакого выражения приращения не выполняется.

0

, что линия эквивалентна этой строке кода

int index = 1+rand.nextInt(6); 
frequency[index] = frequency[index]+1 ; 

так что если вы удалили «++» вы делаете заявление неполную как следующий:

int x= 5; 
x; 

так что дает вам ошибки

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