2013-02-22 3 views
-3

я получаю сообщение об ошибке выполнения:я продолжаю получать исключение в потоке ошибки «основной» java.lang.ArrayIndexOutOfBoundsException

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 
at Series.series(Series.java:10) 
at Series.main(Series.java:21) 

в строках 10 и 21, и не могу понять, что случилось. Я пытаюсь сделать программу суммой ряда 1 - 2x + 3x^2 + 4x^3 ... n * x^(n-1). Любая помощь, которую я могу получить, будет очень признательна!

public class Series { 

public static double series (double x, int n) { 

    int increase = n; 
    double sign = Math.pow(-1.0, increase+1); 
    double exponent = Math.pow(x, increase-1); 
    double[] A = new double[n]; 
    for (int i = 0; i <= n; i++) { 
     A[i] = (sign) * ((increase + 1) - A.length) * (exponent); increase = increase + 1; 
    } 
    double sum = 0; 
    for (int i = 0; i < A.length; i++) { 
      sum = sum + A[i]; 
     } 
    return sum; 
} 

public static void main (String[] args) { 
    System.out.print("series(0.5, 1) should be 1.0"); 
    System.out.println(" : " + series(0.5, 1)); 
} 
} 
+0

Является ли это (1 - 2x + 3x^2 + 4x^3 ... п * х^(п-1)) или (1+ 2x + 3x^2 + 4x^3 ... n * x^(n-1)) –

+0

Обычно условия цикла должны использовать '<', а не '<='. –

ответ

2

Это проблема: -

double[] A = new double[n];

n=1, что означает, что вы можете получить доступ только A[0].

Но ваш for цикл: -

for (int i = 0; i <= n; i++) - это итерация к i<=n (я становлюсь 1 для второй итерации), что означает, что он активно пытается получить доступ к A[1] который бросает ошибку java.lang.ArrayIndexOutOfBoundsException.

+0

Спасибо! Я изменил эту мелочь, и она отлично работает. – user2098119

1

Последний индекс вашего массива (n-1). Когда i == n, генерируется исключение.

0

Вы должны изменить

for (int i = 0; i <= n; i++) 

в

for (int i = 0; i < n; i++) 

Потому что, когда вы находитесь в 1 = 1, то код пытается присвоить значение в [1]. Этот элемент отсутствует, так как размер массива равен 1. Таким образом, массив содержит только {a [0]}.

0

int i = 0; i < = n; i ++) Здесь вы также посещаете i = n, что дает исключение arrayindexoutofbounds!

0

Проблема первый цикл:

double[] A = new double[n]; 

Вы создали массив п элементов. Первый индекс в массиве - 0. Предположим, что n равно 5, поэтому индексы в вашем массиве будут выглядеть как [0],[1],[2],[3],[4].

for (int i = 0; i <= n; i++) { 
     A[i] = (sign) * ((increase + 1) - A.length) * (exponent); increase = increase + 1; 
    } 

В этом цикле ваше состояние <= так, когда n == 5 вы будете пытаться вставить дополнительный 6th элемент, как вы уже вставлен элемент в zero index

1

Индекс массива начинается с нуля. В коде double[] A = new double[n], где n = 1, следует создать массив размером один, индекс которого начинается с нуля.

(т.е. :) A [0], а так как вы дважды запускаете цикл для цикла for (int i = 0; i <= n; i++), во второй раз, когда цикл выполняется, он пытается найти массив с индексом один (т.е. :) A [1], который не существуют и, следовательно, JVM выдает вам исключение.

Удалите знак равенства из цикла for for (int i = 0; i < n; i++), ваш код будет работать нормально.

0

double [] A = новый двойной [n + 1];

это решит вашу проблему

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