2013-02-19 4 views
0

Я пытаюсь изучить алгоритмы разделения и покорения, и я придумал то, что, как я думал, будет работать с использованием java. Предполагается, что алгоритм должен взять массив размера n, который является базой 2. Он должен разделить массив на базовый случай 4, а затем добавить их для индексов вместе. Затем он добавит все вместе, чтобы найти сумму всего массива. Вот что я сделал до сих пор в java и моей ошибке. Я, по крайней мере, на правильном пути для алгоритмов разделения и покорения?Learning Divide and Conquer Algorithms

Исключение возникает:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8 
at getSum.sumArray(getSum.java:17) 
at getSum.sumArray(getSum.java:21) 
at getSum.main(getSum.java:7) 

Вот код:

public class getSum { 
    static int sum = 0; 
    public static void main(String[] args) { 
      int[] numbers = {2,2,2,2,2,2,2,2}; 
      int amount = 0; 
      amount = sumArray(0,numbers.length,numbers); 
      System.out.print(amount); 
    } 

    public static int sumArray(int first, int last, int[] A){ 
     int index = last - first; 
     if(index == 1){ 
      return sum; 
     }else if(index <= 4 && index > 1){ 
      for(int i = first; first < last; i++){ 
       sum += A[i]; 
      } 
      return sum; 
     } 
     return (sumArray(first, last/2, A) + sumArray(last/2, A.length, A)); 
    } 
} 
+0

Вы здесь впервые? По крайней мере, отметьте линию, которая бросает исключение. – SJuan76

+2

'sum' должен быть частью метода' sumArray' .. – Anirudha

ответ

3

Вам нужно изменить:

for(int i = first; first < last; i++){ 

к:

for(int i = first; i < last; i++){ 

Вы продолжаете сравнивать first и last, когда приращение только i

И, как @ Some1.Kill.The.DJ указал,

sum должны быть частью метода sumArray

+0

Не могу поверить, что я пропустил это. Я слишком долго работал над этим способом – shinjuo

+0

приятное наблюдение..также 'sum' должен быть частью метода' sumArray', иначе он удвоил бы сумму. – Anirudha

+0

Рад, что я мог помочь :) – BobTheBuilder

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