0

私はこの形式のツリー構造を持っています:

Index1
|
 --Key1
 --Value1 
Index2
|
 --Key2
 --Value2

KeyValueオブジェクトはオブジェクトの子でありIndex、ツリーにはインデックス オブジェクトがありません。

Indexオブジェクト ( indexList)、Keyオブジェクト ( keyList)、およびValueオブジェクト ( )の配列リストを管理していますvalueList

viewerのオブジェクトですTreeViewer

私の目的は Index オブジェクトを削除することであり、このアクションを担当するコードは次のとおりです。

String indexName = text.getText();

for(int i =0; i< model.indexList.size(); i++)
{                   
    if(model.indexList.get(i).getName().equals(indexName))
    {
        Index temp = model.indexList.get(i);
        int noOfKeys   =  temp.keyList.size();
        int noOfValues =  temp.valueList.size();

        for(int j=0; j<noOfKeys ; j++ )
        {
            temp.keyList.remove(j);
            temp.valueList.remove(j);
        } 

        model.indexList.remove(i);
        break;
    }
}
viewer.refresh();

削除アクションを実行すると、ノードは削除されますが、スタック オーバーフロー エラーが発生します。

どこで間違ったのか教えてください。

4

1 に答える 1

1

エラーは、for ループのリストからアイテムを削除しているためです。

for(int j=0; j<noOfKeys ; j++ )
                    {
                        temp.keyList.remove(j);
                        temp.valueList.remove(j);
                    } 

おそらくエラーの原因です。

リストから何かを削除するたびに、すべてのアイテムの相対インデックス値が変更されます。たとえば、temp.keylist.remove(0) は 0 番目のアイテムを削除し、インデックス 1 のアイテムはインデックス 0 に移動します。次の反復では、j はすでに 1 にインクリメントされています (ただし、代わりにゼロである必要があります)。

私が示したコードのセクションの上にコメントしてみてください。オーバーフローエラーが発生することはありません (これにより、コードのどの部分が問題を引き起こしているかを最初に確認できます)

次のステップは、次のようなものを試すことです

temp.keyList.clear()
temp.valueList.clear()

上記の for ループの代わりに。

于 2012-01-10T14:36:19.847 に答える