0

1 つのボタンと 1 つのテキストビューを備えた単純な Android プログラムがあります。ボタンをクリックすると、ArrayList に数値が挿入されます。しかし、うまくいきません。追加するように変更すると、正常に動作します。

package test_ad.com;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Test_adActivity extends Activity {
    ArrayList<Integer> al = new ArrayList<Integer>();
    Button myB;
    int i=0;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    myB = (Button) findViewById(R.id.button1);
    myTV = (TextView) findViewById(R.id.textView1);
    myB.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            al.set(i,10*i);//insert an Integer at index i, but not working
            i++;
            if (i == 5)
                myTV.setText(al.toString());
        }
    });
}

}

4

2 に答える 2

0

ArrayList.set() は、arraylist.size() が値を設定しようとしている位置よりも大きい場合にのみ機能します。

http://docs.oracle.com/javase/6/docs/api/java/util/List.html#set(int, E)

于 2012-06-19T21:11:50.137 に答える
0

編集済み - int i を追加しました。最初の段落は適用されなくなりました。

問題は、ArrayList が動的に大きくなることですが、どのくらいの大きさになるか、または大きくなるように指示する必要があります。ArrayList に現在 5 つの要素があり、項目を 10 の位置に設定しようとすると、IndexOutOfBoundsException が発生するはずです。

add() メソッドを使用したくない理由はありますか? set() を引き続き使用する場合は、ensureCapacity() または size() を使用して、ArrayList が十分な大きさであることを確認する必要があります。

どちらの方法も、http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.htmlに記載されています。

于 2012-06-19T21:14:26.350 に答える