2013-03-05 2 views
2

여기까지 제 코드가 있습니다. 주어진 돈의 합을 생산하는 모든 조합을 재귀 적으로 찾고 싶습니다. 이것은 콤보를 인쇄해야합니다 테스트 프로그램입니다,하지만 난 excpected 같은 오류코인 변경 : 조합을 재귀 적으로 가져오고, 배열에 저장하는 방법

는 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 

}
}

+0

나는 당신의 고문에 문제가 있다고 생각합니다. sumSoFar와 coinsSoar를 반복적으로 증가시키고 있습니다. 따라서 첫 번째 동전보다 더 큰 금액을 얻으면 예제를 통해 첫 번째 동전을 사용하지 않는 해결책을 찾지 못할 것입니다. 그리고 그 문제를 해결하면 중복 된 해결책을 찾을 수 있습니다 ... – pgras

답변

1

자바 배열은 자동으로 성장하지 않습니다. 따라서 다음이 항상 줄 것 ArrayIndexOutOfBoundsException (물론, 그 중 하나 또는 NullPointerException :)) :

coinsSoFar[coinsSoFar.length] = ...; 

가장 쉬운 옵션은 아마 당신이 함께 가기로 적절하게 크기 조정, ArrayList<Integer>coinsSoFar 위해를 사용하는 것입니다.

관련 문제