0

なぜこれが機能しないのですか。私がやりたいのは、itemsという名前の配列に新しいテキスト文字列を追加することです

final String items[] = {"Java", "JSP", "PHP", "C", "C++"};
int itemsl = items.length + 1;
items[itemsl] = "f";

これはエラー出力です

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 6
    at com.modinstaller.guii$4.actionPerformed(guii.java:127)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
4

6 に答える 6

4

ここでは、配列に関して実際に 2 つの誤解があります。

まず、配列は作成時に決定される固定サイズです。この場合、5 つの要素の配列があります。要素を置き換えることはできますが、配列が作成された後に加算または減算することはできません。

これに加えて、できたとしても、array.length は既に配列の末尾を 1 つ過ぎた位置にあり、それに 1 を追加すると、配列の末尾を 2 つ超えた位置になります。

これは、配列が 0 から始まるため、長さ 5 の配列には 0 から 4 までの要素があり、それを行ってもitems[items.length]ArrayIndexOutOfBoundsException が発生します。

于 2012-04-19T14:09:04.373 に答える
4

Java では、配列の要素数を変更することはできません。新しいものを作成して要素をコピーするか、Collectionクラスの 1 つを使用しますArrayList

于 2012-04-19T14:03:35.313 に答える
1

私は数年間Javaを離れています...しかし、とにかく、そのような配列を動的に変更できるとは思いません。

ここで使用すると、ステートメントint itemsl = items.length + 1は配列の範囲外の int を作成していますitems[itemsl] = "f";

Java コレクションの 1 つを使用して配列を管理することを検討してください。

于 2012-04-19T14:06:28.837 に答える
1

items[itemsl]itemsl配列サイズが!よりも小さいため、範囲外です。

したがって、ArrayIndexOutOfBoundExceptionを取得します。

動的配列(サイズが変更可能な配列)を探している場合は、おそらく のArrayList<String>代わりにを使用することをお勧めしますString[]

于 2012-04-19T14:03:38.993 に答える
0

新しいアレイを作成する必要があります。作成した後は、サイズを変更することはできません。

于 2012-04-19T14:04:20.240 に答える