0

私は問題に直面していますが、正確な説明が見つかりませんでした。プログラムをデバッグ モードで実行しています。変数が g_temNodes 配列リストに追加されると、次のようになります、その変数は、実行中のg_nodes.add(g_tempNodes);の前に g_nodes にも自動的に追加されます。.

Plsはそれを解決する方法をいくつか教えてください。前もって感謝します。

私のコードは次のとおりです。

ArrayList<ArrayList<String>> g_nodes = new ArrayList<ArrayList<String>>();
ArrayList<String> g_tempNodes = new ArrayList<String>();
...
...
private String GetDeptCd(String x_dept_cd, int x_flag) {
...
...
while (p_sql.next()) {
    String p_dept_cd = p_sql.getString("dept_cd");
    if(x_flag == 0){
        g_tempNodes.removeAll(g_tempNodes);
    }
    g_tempNodes.add(p_dept_cd);
    System.out.println("g_tempNodes = "+g_tempNodes);
    g_nodes.add(g_tempNodes);
    System.out.println("g_nodes = "+g_nodes);
    GetDeptCd(p_dept_cd, 1);
    g_tempNodes.remove(g_tempNodes.size()-1);
}
return null;
}

これはコンソールの出力です。

g_tempNodes = [100]
g_nodes = [[100]]

g_tempNodes = [100, 999]
g_nodes = [[100, 999], [100, 999]]

g_tempNodes = [100, 101]
g_nodes = [[100, 101], [100, 101], [100, 101]]
4

1 に答える 1

1

常に同じものを使用しているためg_tempNodes、値が上書きされています。g_tempNodes常にループ内でnew を宣言する

ArrayList<ArrayList<String>> g_nodes = new ArrayList<ArrayList<String>>();
// ArrayList<String> g_tempNodes = new ArrayList<String>(); // not needed here
...
while (p_sql.next()) {
    ArrayList<String> g_tempNodes = new ArrayList<String>(); // new list created always
    ...
}
于 2013-11-12T09:04:57.453 に答える