0

Android の学習を始めたばかりで、誤解を招きました。textView とボタンを表示するアプリケーションを作成しようとしています。ボタンをクリックするたびに、textView に表示される新しい乱数が生成されます。

残念ながら、私のコードはエラーのリストを引き起こします。ここにあります:

public class FirstAndroidProjectActivity extends Activity {

public OnClickListener listener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        TextView tv = (TextView) findViewById(R.id.display);
        Random r = new Random();
        int i = r.nextInt(101);
         tv.setText(i);

    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
   Button button = (Button) findViewById(R.id.button);
   button.setOnClickListener(listener);    
    }
}

ランダムを使用せず、i以外の文字列を使用する場合 (たとえばtv.setText("99"); )、すべて問題ありませんが、変数を setText() のパラメーターとして使用すると機能しません。

どこが間違っていますか?

あなたの助けを願っています。

4

6 に答える 6

5

TextView にテキストを設定する前に、乱数を文字列に変換する必要があります

試す

tv.setText(i +"");
于 2012-06-26T16:37:37.280 に答える
2

試す:

tv.setText(String.valueOf(i));
于 2012-06-26T16:39:29.950 に答える
1

Java は型を自動変換しません。+ 演算子は、渡されたパラメーターの 1 つ以上が文字列である場合に、それらのパラメーターを文字列に変換するためにオーバーロードされます。したがって、i + "" を setText() に渡すと、文字列が渡されますが、単に i を渡すと、コンパイラは、文字列を期待するメソッドに int を渡していることを確認し、それができないことを知らせます。終わり。

于 2012-06-26T16:40:33.587 に答える
0

i は int です。tv.setText("" + i); を試してください。

于 2012-06-26T16:39:41.683 に答える
0

textView に設定する前に、整数を文字列に変換してください。メソッドの外にも移動する必要がありRandom r = new Random();ます。そうしないと、数値が実際にはランダムにならない可能性があります。

Random r = new Random();

@Override
public void onClick(View v) {
    TextView tv = (TextView) findViewById(R.id.display);
    int i = r.nextInt(101);
    tv.setText(Integer.toString(i));
}

ドキュメントから:

Random の 2 つのインスタンスが同じシードで作成され、それぞれに対して同じ一連のメソッド呼び出しが行われる場合、それらは同一の数列を生成して返します。

2 つのオブジェクトの作成Randomが速すぎる場合 (たとえば、ユーザーがボタンを 2 回非常に速くクリックした場合)、それらは同じシードを共有し (システム クロックが生成に使用されます)、結果として同じ数が 2 回取得されます。 .

Randomグローバル変数にインスタンスを1 つだけ作成することで、この問題を回避できます。

于 2012-06-26T16:39:51.027 に答える
0

使用する

tv.setText(new Integer(i).toString()) ;
于 2012-06-26T16:40:12.620 に答える