2017-11-08 11 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++]; 

Javaは短絡で動作するよう、あなたの配列の最後のインデックスが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解決策として回答を選択したり、プラスを与えることができれば歓迎します。 –

関連する問題