1

アイテム配列はjarファイルで宣言され、そのサイズと値はme.iによって宣言されています

public void itemsDelete(int x)
{
    Item[] temp=new Item[items.length-1];
    for(int i=0;i<temp.length;i++)
    {
        if(i!=x)
        {
            temp[i]=items[i];
        }
    }
    items=new Item[temp.length]
    for(int i=0;i<temp.length;i++)
    {
        items[i]=temp[i];
    }
}

および if(items[i]!=null){code...} ですが、どちらの場合も実行すると、「スレッド "AWT-EventQueue-0" java.lang.NullPointerException "" での例外」が見られます。問題になる?

4

1 に答える 1

1

最初のループは、最後のアイテムをコピーする前に常に停止し、インデックス x の一時配列に値がコピーされることもありません。

アイテムが文字列の配列であると想像してください:

「0」、「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」

そして、次のコードを使用して、インデックス 5 のアイテムを削除します。

"0"、"1"、"2"、"3"、"4"、ヌル、"6"、"7"

おそらく後でアイテム配列が処理されるときに、ヌルポインター例外が発生する理由を説明できるかもしれません。

これはあなたが望むより多くのことをするかもしれません.Perceptionが示唆したように、完了したらtempに等しいアイテムを割り当てることができます.

public void itemsDelete(int x)
{
Item[] temp=new Item[items.length-1];

//This variable will keep track of the index in the temp array
int j = 0;

//for each of the items in the input array...
for(int i=0;i<items.length;i++)
{
    if(i!=x)
    {
        temp[j]=items[i];
        //We've copied a value so increment the temp index...
        j++;
    }
}

items = temp;
}
于 2013-03-30T01:19:02.307 に答える