到目前为止,这是我的代码。我想递归地找到产生给定金额的所有组合。这是应该打印连击的测试程序,但是正如我所料,这里有一个错误
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
}
}
最佳答案
当您尝试分配超出数组长度的索引时,Java数组不会自动增长。因此,以下内容将始终给出ArrayIndexOutOfBoundsException
(或者,或者NullPointerException
:)):
coinsSoFar[coinsSoFar.length] = ...;
最简单的选择是对
ArrayList<Integer>
使用coinsSoFar
,并根据需要适当调整其大小。关于java - 找零:递归获取组合,如何将其保存到数组中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15232738/