硬币更改:递归获取组合,如何将它们保存到数组中

时间:2013-03-05 19:45:19

标签: java arrays recursion combinations

到目前为止,这是我的代码。我想反复找到产生给定金额的所有组合。这是应该打印组合的测试程序,但正如我所想的那样,有一个错误

ArrayIndexOutOfBoundsException:0

两排。请帮助,我不明白。 我如何将它们保存到阵列而不是打印?

import java.util.Scanner;

public class CoinChange {
public static void printCombos(int sum, int sumSoFar, int[] coinsSoFar) {

int[] coins = {5, 10, 20, 50};


if (sum == sumSoFar) {
System.out.print(coinsSoFar);
    }

else if (sum > sumSoFar) {
    for (int i = 0; i < 4; i++) {   
    sumSoFar = sumSoFar + coins[i];
    coinsSoFar[coinsSoFar.length] = coins[i];  // error row
    printCombos(sum, sumSoFar, coinsSoFar);

    }   

    }
    }

public static void main (String[]args) {

Scanner read = new Scanner(System.in);
int sum = read.nextInt();
int[] empty = {}; 
printCombos(sum, 0, empty); //error row

}
}

1 个答案:

答案 0 :(得分:1)

当您尝试在超出数组长度的索引处分配时,Java数组不会自动增长。因此,以下内容总是会给出ArrayIndexOutOfBoundsException(嗯,要么是NullPointerException :)):

coinsSoFar[coinsSoFar.length] = ...;

最简单的选择是对coinsSoFar使用ArrayList<Integer>,并在进行时适当调整大小。