2017-11-08 9 views
0

import java.io. *;CoinChangeProblem 코드의 예외

public class CoinChangeProblem { 

public static void main(String[] args) throws IOException { 
    // TODO Auto-generated method stub 
    int[] arr; 
    arr = new int[]{1, 2, 5, 10, 20, 50, 100, 500, 1000}; 
    int[] arr2; 
    arr2 = new int[]{-1, -1, -1, -1, -1, -1, -1, -1, -1}; 
    int max_coin = 0, due, i = 0, j = 0; 
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.print("\n\n\tEnter the amount of currency due"); 
    due = Integer.parseInt(stdin.readLine()); 
    while (due != 0) { 
     for (j = 0; due > arr[j] && j < 9;) 
      max_coin = arr[j++]; 
     j = 0; 
     arr2[i] = max_coin; 
     due = due - max_coin; 
     i += 1; 
    } 
    i = 0; 
    for (int k = 0; arr2[k] != -1; k++) { 
     System.out.print(" " + arr2[k]); 
    } 
} 
} 

컴파일러는 라인 9시는, ArrayIndexOutOfBoundsException을 던지고 및 23.If 당신은 솔루션을 도와주세요 가지고있다! 루프가 arr2[i] = max_coin 액세스 arr2[9]을 만들지 만

for(j=0; j<9 && due>arr[j];) 
    max_coin=arr[j++]; 

자바 단락으로 작동하기 때문에 배열의 마지막 인덱스가 8

답변

0

마지막 반복, j는 경우에 따라서는 확인 먼저 9보다 작 으면 거짓이고 루프가 끝납니다.

+0

그래, 나는 최대 8 개의 인덱스를 구속하기 위해 조건을 추가했는데, 논리에는 구멍이 있지만 어쨌든 도움이된다. ☺ – learner

0

변경 루프 귀하에 대한의

+0

고맙습니다. 지금까지이 개념에 대해 ☺ – learner

0

이 프로그램은 'due'로컬 변수에 저장된 표준 입력에서 입력 변수를 가져옵니다.

예외 스레드 "메인"java.lang.ArrayIndexOutOfBoundsException : 9 CoinChangeProblem.main의 입력 값보다 큰 7이 예외를 제기이면 입력 '인해'< = 7 일 때 단지 작동 (CoinChangeProblem.java:23)

'9'는 줄 번호가 아니므로주의하십시오. 줄 번호가 아니므로 주어진 배열의 최대 크기보다 큰 인덱스를 나타냅니다. 'attr2'배열의 크기는 9이며 [0-8] 색인을 지원합니다. 따라서 'i'변수가 9에 도달하면 'arr2 [i]'표현식이 ArrayIndexOutOfBoundsException을 발생시킵니다.

+0

그래요. 그 말을 고쳤고 지금 작동 중입니다. 도와 주셔서 감사합니다. ☺ – learner

+0

@nishant 답변을 솔루션으로 선택하거나 더하기를 원한다면 환영합니다. –