2014-01-28 5 views
0

Не удается найти ошибку в массиве монет. когда я пытался инициализировать массив с n + 10 элементами, он работал. но на самом деле он должен использовать только n элементов. где я ошибаюсь?ArrayIndexOutOfBoundsException Ошибка в моем коде

import java.util.Scanner; 

    public class MaximumContiguousSum { 

     public static void main(String args[]){ 
      Scanner in = new Scanner(System.in); 
      int amount, n; 
      System.out.print("Enter number of types of coins : "); 
      n = in.nextInt(); 
      int[] coins = new int[n]; 
      System.out.print("Enter coins values : "); 
      for(int i=0; i<n; i++){ 
       coins[i] = in.nextInt(); 
      } 
      System.out.print("Enter the amount : "); 
      amount = in.nextInt(); 
      int[] arr = new int[amount+1]; 
      arr[1]=1; arr[0]=0; 
      for(int i=2; i<=amount; i++){ 
       arr[i]=100; 
       int j=0; 

//Error in the following line 
       while(coins[j]<=i && j<n){ 
        arr[i]=min(arr[i], 1+arr[i-coins[j]]); 
        j++; 
       } 
      } 
      System.out.println("The number of coins to be used : " + arr[amount]); 
      in.close(); 
     } 

     private static int min(int a, int b) { 
      // TODO Auto-generated method stub 
      return (a<b)?a:b; 
     } 
    } 


Output: 

    Enter number of types of coins : 3 
    Enter coins values : 1 2 7 
    Enter the amount : 10 
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 
     at MaximumContiguousSum.main(MaximumContiguousSum.java:22) 
+0

Какая линия является линией 22? как показано: 'MaximumContiguousSum.java: 22' –

+0

while (монеты [j] <= i && j <= n) { –

+0

Если' j' равно 'n', индекс выходит за рамки для массива' coins'. Поместите 'j piticent123

ответ

0

Это

int[] coins = new int[n]; 

объявляет монеты, чтобы иметь п элементов с максимальным индексом п - 1

это

while(coins[j]<=i && j<=n){ 
    arr[i]=min(arr[i], 1+arr[i-coins[j]]); 

будет пытаться получить доступ монет [п], когда у = n, который заканчивается

Редактировать: arr [i-coins [j]] защищен от.

наконец это:

while(coins[j]<=i && j<n) 

должен быть этот

while(j < n && coins[j]<=i) 
+0

doesnt wrk с j

+0

он не проверяет с j = 2 и i = 2 bcoz theres условия монеты [j] <= i, так как 7 <2 не входят в цикл –

+0

Да, вы правы в этом. Я оставлю его в контексте, хотя – waTeim

0

У вас ошибка совсем по-одному. Ваша линия:

while(coins[j]<=i && j<=n) 

будет пытаться захватить монет [N], прежде чем он выйдет, а окончательный индекс вашего массива фактически п-1

+0

не работает с j

+0

Но он также работает, когда j == n, поэтому, когда вы используете его в монетах [j], вы попадаете в массив из связанной ошибки , –

0

Не проверять больше или равно на линии ошибки

Изменяйте эту while(coins[j]<=i && j<n){ к while(coins[j]<i && j<n){ в коде

Смежные вопросы