2

これまでの私のコードは次のとおりです。与えられた金額を生み出すすべての組み合わせを再帰的に見つけたいと思います。これはコンボを出力するテスト プログラムですが、予想どおり、エラーが発生しました。

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

}
}

4

1 に答える 1

1

配列の長さを超えるインデックスで割り当てようとしても、Java配列は自動的に大きくなりません。したがって、以下は常にArrayIndexOutOfBoundsException(まあ、それまたはNullPointerException:))を与えます:

coinsSoFar[coinsSoFar.length] = ...;

最も簡単なオプションは、おそらくArrayList<Integer>forを使用してcoinsSoFar、作業に合わせて適切なサイズに変更することです。

于 2013-03-05T19:47:13.670 に答える