1

アプリケーションを実行するとランダムな画像が表示され、クリックすると別のランダムな画像が表示されるコードを作成しようとしていますが、エラーが発生し、Java 言語の経験は 1 日しかありません。

助けてください。

    @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 「別メソッドで定義された内部クラス内の non-final 変数の写真を参照できない」 「ran を解決できない」 ★3 「inner クラス内の non-final 変数の画像を参照できない」別のメソッドで定義された内部クラス" "別のメソッドで定義された内部クラス内の非最終変数の写真を参照することはできません"

リフレッシュしてみましたが、ctrl + shift + oも実行しましたが、問題がどこにあるのかわかりません...

4

3 に答える 3

4

1) 変数を宣言しましたrndが、それを として参照しようとしていranます。一貫性を保つ必要があります。

2 と 3) と の両方photosを変数rndとして宣言する必要がありfinalます。これは、匿名の内部クラスで使用しているためです。

ローカル変数が匿名の内部クラス内で使用されたときに最終的であるというビジネスは、基本的に、匿名の内部クラスが機能する方法によるものです。基本的に、インスタンスを作成すると、ローカル変数の値が (生成された) 匿名の内部クラスのコンストラクターに渡されます。コンストラクターは、後で使用するときのためにそれらの変数のコピーを保持します。変数を 1 つに制限することfinalで、変数がメソッドまたは匿名内部クラスのいずれかで変更される可能性があり、それらの変更が他のコンテキストで見られない状況を回避します。

于 2013-03-02T14:57:27.980 に答える
1

1) 私はあなたが意味したと思います rnd.nextInt(... (「rnd」、「ran」ではありません)

final2)修飾子をphotosandrnd変数に追加して、これを修正します。

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

3)画像ビューの画像と同じ:

final ImageView image=(ImageView)findViewById(R.id.imageview1);
于 2013-03-02T14:58:52.207 に答える
0

変化する

        Random rnd=new Random();

        final Random ran=new Random();

また、変更

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

        final int[] photos=...;
        final ImageView image=...;
于 2013-03-02T14:57:15.587 に答える