0

私のプログラムは、ユーザーがいくつのテキストフィールドを持ちたいかを尋ねることから始まります

public class textEvent1 implements ActionListener {    //action listener for "how many masses?"
            public void actionPerformed (ActionEvent e) {
                n = (int)(Double.parseDouble(massNumField.getText())); 

次に、for ループを作成して、ラベルとテキスト フィールドを作成します (ラベルとテキスト フィールドの数がわからないため、リストを作成しました)。いくつかのリストがありますが、1 つだけ例を挙げます。

ArrayList masses = new ArrayList();

    for(int i=1; i<=n; i++) {                                  //adds text event 2 text to the screen
                        massLabel = new JLabel("How much mass does Mass " +i+ " have? ");
                        massField = new JTextField(5);
                        masses.add(massField);

質量リストの要素をそのような変数に割り当てようとすると、私の問題が発生するようです。

for(int i=1; i<=n; i++) {
                        mass =  Double.parseDouble(((JTextComponent) masses.get(i)).getText());

私はいくつかのことを試しました... mass = masses.get(i).....mass = masses.get(i).getText()) など。Null ポインター例外などのエラーが発生し続けるか、オブジェクトを parseDouble できないと言っています。

この例で発生するエラーは次のとおりです。

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3 >= 3
    at java.util.Vector.elementAt(Unknown Source)
    at acmx.export.java.util.ArrayList.get(ArrayList.java:54)
    at Orbit$textEvent2.actionPerformed(Orbit.java:151)

151行目は

mass =  Double.parseDouble(((JTextComponent) masses.get(i)).getText());
4

1 に答える 1

2

を作成するときはJTextFields、次のことを行います。

for(int i=1; i<=n; i++) {
    ...

インデックスは 0 から始まることに注意してください。したがって、インデックスとしてList使用して同様のループでアイテムを取得するとi、最後のアイテムの 1 つ後ろにアクセスしようとします。読み取りループのインデックスを次のように変更します。

for (int i = 0; i < n; i++) {
    ...

または、古い Java バージョンを使用する必要がない限り、enhance for ループを使用することもできます。

for (Object massField : masses) {
    mass =  Double.parseDouble(((JTextComponent) massField).getText());
    ...

(Javaバージョンがジェネリックをサポートしている場合は、ジェネリックも実際に使用する必要があります)。

于 2013-09-17T19:07:57.370 に答える