2013-03-02 2 views
1

Я пытаюсь сделать код, который, когда я запускаю приложение, имеет случайное изображение, и когда я нажимаю на него, он показывает другое случайное изображение, но я получаю ошибки, и у меня только 1 дневного опыта и языка Java.ran не может быть разрешен

Пожалуйста, помогите.

@Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      int[] photos={R.drawable.img1, R.drawable.img2,R.drawable.img3,R.drawable.img4}; 

      ImageView image=(ImageView)findViewById(R.id.imageview1); 

      Random rnd=new Random(); 
★1   int i=ran.nextInt(photos.length); 
      image.setImageResource(photos[i]); 
      image.setOnClickListener(new View.OnClickListener() 
      { 
       public void onClick(View v) 
       { 
★2    int k=ran.nextInt(photos.length); 
★3    image.setImageResource(photos[k]); 
       } 
      } 
      ); 


     } 

Я добавил ★, чтобы показать вам, где ошибки.

★ 1 «RAN не может быть решены» ★ 2 «не может относиться к неконечным переменным фотографиям внутри внутреннего класса, определенный в другом методе» «проходил не может быть решен» ★ 3 «Не может относиться к не конечное переменное изображение внутри внутреннего класса, определенного другим способом « « Нельзя ссылаться на не конечные переменные фотографии внутри внутреннего класса, определенные другим способом »

Я попытался обновить, а также сделал ctrl + shift + o, не может выяснить, где проблема ...

ответ

0

Изменение

 Random rnd=new Random(); 

в

 final Random ran=new Random(); 

Кроме того, изменение

 int[] photos=...; 
     ImageView image=...; 

в

 final int[] photos=...; 
     final ImageView image=...; 
+0

Спасибо, что исправлено ошибка при запуске. Но «ссылка на не конечную переменную» по-прежнему остается незафиксированной, но я уверен, что это будет выяснено! – user2126716

+0

отсутствует окончательный модификатор на переменной «rnd», чтобы быть полным – Guian

+0

Спасибо большое, больше никаких ошибок!:) – user2126716

4

1) Вы объявили переменную rnd, но вы пытаетесь обратиться к нему как ran. Вы должны быть последовательными.

2 и 3) Оба photos и rnd должны быть объявлены как переменные final, потому что вы используете их в анонимном внутреннем классе.

Дело о локальных переменных, являющихся окончательными, когда они используются внутри анонимного внутреннего класса, в основном связано с тем, как работают анонимные внутренние классы. В основном, когда вы создаете экземпляр, он передает значения локальной переменной в (сгенерированный) конструктор для анонимного внутреннего класса, который сохраняет копии этих переменных, когда они используются позже. Ограничивая переменные на final, он избегает ситуаций, когда переменная может быть изменена либо в методе, либо в анонимном внутреннем классе, причем эти изменения не отображаются в другом контексте.

+0

Вы пропустили переменную 'image', которая также должна быть окончательной. – Guian

+0

О, спасибо. Теперь последняя ошибка в этой строке: final image.setImageResource (фотографии [k]); говорится, что есть «Синтаксическая ошибка на токенах (-ах), ошибочная конструкция (-ы)». Я буду искать решение для этого, спасибо за вашу помощь :). – user2126716

1

1) Я думаю, вы имели в виду rnd.nextInt(... ('RND', а не 'бежал')

2) добавить модификатор final переменной photos и rnd, чтобы исправить это:

final int[] photos={R.drawable.img1, R.drawable.img2,R.drawable.img3,R.drawable.img4}; 

3) тот же на изображении изображения изображения:

final ImageView image=(ImageView)findViewById(R.id.imageview1); 
+0

Ох, спасибо большое, никаких ошибок больше нет. – user2126716

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