0

私は最近、Java の基本的な知識だけで Android プログラミングを始めました。コードに問題があります。目的は、ボタンがクリックされた後に、配列に既にプログラムされているランダムに選択されたテキストを表示することです (onclick イベント)。

public void magicbegins() //
{
    int min = 0;
    int max = 3;
    Random r = new Random();
    int rand = r.nextInt(max - min + 1) + min;
    //generating random number from 0 to 3 to use as index in later event
    String[] magictext = {"yes", "no", "maybe"};

    TextView text = (TextView) findViewById(R.id.textView1);
    //using the generated number as index for programmed string array
    text.setText(magictext[rand]);
}

いずれにせよ、このコードの使用が推奨されない場合、少なくとも私が目指しているものと同様のことを行うサンプルスクリプトを誰かが提供してくれますか?

4

3 に答える 3

5

インデックスは 0、1、または 2 である必要があるため、使用するだけr.nextInt(3)です (または、変数宣言の順序を変更する場合はr.nextInt(magictext.length))。r.nextInt(max - min + 1)時折、範囲外のインデックスである 3 が返されるため、絶対に使用しないでください。

この式:

r.nextInt(max - min + 1) + min

minおよびmax両方をランダムな整数の生成範囲に含める必要がある場合に適しています。目的の範囲が までであるが、 を含まない場合max、式は次のようになります。

r.nextInt(max - min) + min

minこれを使用することをお勧めしますが、とをそれぞれ0 と 3 に置き換えmaxます。

magictextメソッドから移動しrて、クラスのメンバー フィールドにすることも検討してください。フィールドでも同じことができるので、text毎回調べる必要はありません。textメソッドでフィールドを初期化できますonCreate。コードは次のようになります。

private final Random r = new Random();
private final String[] magictext = {"yes", "no", "maybe"};
private TextView text;

protected void onCreate(Bundle savedInstanceState) {
    . . . // what you have now, followed by
    text = (TextView) findViewById(R.id.textView1);
}

public void magicbegins()
{
    int rand = r.nextInt(magictext.length);

    text.setText(magictext[rand]);
}
于 2013-03-19T15:08:58.637 に答える
1

@Ted Hoppが提案したように

これを使って

public void magicbegins() 
{
    Random r = new Random();
    int rand = r.nextInt(3);
    String[] magictext = {"yes", "no", "maybe"};

    TextView text = (TextView) findViewById(R.id.textView1);

    text.setText(magictext[rand]);
}
于 2013-03-19T15:14:16.680 に答える
0

Random#nextInt(int n)

この乱数ジェネレーターのシーケンスから引き出された、0 (0 を含む) と指定された値 (0 を含まない) の間の一様に分散された疑似乱数の int 値を返します。nextInt の一般的な契約は、指定された範囲内の 1 つの int 値が疑似ランダムに生成されて返されることです。n 個の可能な int 値はすべて (ほぼ) 等しい確率で生成されます。

int rand = r.nextInt(max - min + 1) + min;

3 を生成できます。配列には要素が 3 つしかないため、インデックスは 0,1,2 になります。magictext[3] にアクセスしようとすると、 ArrayIndexOutOfBoundsException.

于 2013-03-19T15:12:31.317 に答える