2d对象数组,每个都有自己的arraylist,都看起来都有相同的arraylist

时间:2013-11-23 05:38:14

标签: java arraylist

我正在尝试制作经典的硬币更换应用程序,它接受不同的硬币值并使用最少量的硬币创建更改。它应该使用动态编程和自定义更改类。我的问题是所有numberOfCoins变量都是正确的,但似乎所有Coins ArrayLists都引用相同的ArrayList。我觉得这是基本的,我没有得到,因为我以前从未使用过ArrayLists,或者我在创建对象的地方,但我只是不能把手指放在它上面。没有找到讲义,只是朝着正确的方向微微移动。

我的班级:

public class Change {
public int numberOfCoins;
public List<Integer> Coins = new ArrayList<Integer>();

Change(int x){
    numberOfCoins = x;
}

Change(int x, ArrayList<Integer> c){
    numberOfCoins = x;
    Coins = c;
}

public void printChange(int j){
    System.out.println("The fewest number of coins to make $." + j + " is " + numberOfCoins);
    System.out.println("The coins used are:" + Coins.toString());
}
}

我的计划:

    Change[][] C = new Change[valuesArrayLength + 1][j + 1];

    for(int y = valuesArrayLength - 1; y >= 0; y--){
        for(int x = 0; x <= j; x++){
            if(x == 0){
                C[y][x] = new Change(0);
            }
            else if(value[y] > x){
                C[y][x] = new Change(C[y+1][x].numberOfCoins, (ArrayList<Integer>) C[y+1][x].Coins);
            }
            else{
                if(y + 1 == valuesArrayLength){         // avoid referring to null and filling table with 0s (first time through j, when (i or y) = valuesArrayLength)
                    C[y][x] = new Change(1 + C[y][x - value[y]].numberOfCoins, (ArrayList<Integer>) C[y][x - value[y]].Coins);
                    C[y][x].Coins.add(value[y]);
                }
                else{
                    if(1 + C[y][x - value[y]].numberOfCoins < C[y+1][x].numberOfCoins){
                        C[y][x] = new Change(1 + C[y][x - value[y]].numberOfCoins, (ArrayList<Integer>) C[y][x - value[y]].Coins);
                        C[y][x].Coins.add(value[y]);
                    }    
                    else{
                        C[y][x] = new Change(C[y+1][x].numberOfCoins, (ArrayList<Integer>) C[y+1][x].Coins);  
                    }
                }
            }
        }
    }

    C[i][j].printChange(j);

}

1 个答案:

答案 0 :(得分:0)

你可以尝试:

Change(int x, ArrayList<Integer> c){
    numberOfCoins = x;
    Coins = new ArrayList<Integer>(c);
}