我正在尝试制作经典的硬币更换应用程序,它接受不同的硬币值并使用最少量的硬币创建更改。它应该使用动态编程和自定义更改类。我的问题是所有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);
}
答案 0 :(得分:0)
你可以尝试:
Change(int x, ArrayList<Integer> c){
numberOfCoins = x;
Coins = new ArrayList<Integer>(c);
}