Инициализация массива парных символов Java - PullRequest
1 голос
/ 28 ноября 2011

Не могу понять, почему этот код не работает.Я создаю функцию для оценки полинома во всех точках в заданном интервале х, с частотой, указанной пользователем.Мой базовый полиномиальный код не имеет отношения к проблеме.Моя проблема заключается в заполнении моего массива значениями, которые я получаю из метода Хорнера.

public double[] evalAt(double s, double f, int n) {
    double[] resultArray = new double[n];
    double h =((f - s)/(n));
    if(s==f) {
        double tempResult = 0;
        for (int i = this.degree; i >= 0; i--) {
            tempResult = tempResult * s + this.terms[i].getCoefficient();
        }
        resultArray[0] = tempResult;
    } else {
        int counter = 0;
        for(double i = s; i <= f; i=i+h) {
            double tempResult = 0;
            for (int j = this.degree; j >= 0; j--) {
                tempResult = tempResult * i + this.terms[j].getCoefficient();
            }
            System.out.println("Counter: " + counter + " Result @ Counter: " + tempResult);
            resultArray[counter++] = tempResult;
        }
        System.out.println(resultArray[0]);
        System.out.println(resultArray[1]);
        System.out.println(resultArray[2]);
        System.out.println(resultArray[3]);
    }
    return resultArray;
}

У меня есть оператор print, чтобы показать мне значения счетчика и временного результата.тогда я использую синтаксис resultArray['index'] = 'value';.Когда я запускаю это, я вижу, что счетчик и значение точно такие, как я хочу, однако, когда я проверяю массив с четырьмя операторами print внизу, ничего не происходит.Мои входные данные 0,10,10:

Выход:

Counter: 0 Result @ Counter: 0.0
Counter: 1 Result @ Counter: 1.0
Counter: 2 Result @ Counter: 4.0
Counter: 3 Result @ Counter: 9.0
Counter: 4 Result @ Counter: 16.0
Counter: 5 Result @ Counter: 25.0
Counter: 6 Result @ Counter: 36.0
Counter: 7 Result @ Counter: 49.0
Counter: 8 Result @ Counter: 64.0
Counter: 9 Result @ Counter: 81.0
Counter: 10 Result @ Counter: 100.0

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Я сильно подозреваю, что это вызывает исключение ArrayIndexOutOfBoundsException, которое проглатывается за пределами этого метода.

Вы создаете массив размером n, в данном случае 10, но ваш счетчик переходит от нуля до f (также 10), что в сумме составляет 11 элементов. Так что есть хотя бы один из них.

Просмотрите ваш код и найдите бит, который говорит

catch (Exception e) {
}

и измените его на

catch (Exception e) {
    e.printStackTrace();
}

, чтобы упростить обнаружение таких ошибок.

1 голос
/ 28 ноября 2011

К сожалению, я пока не могу оставлять комментарии, так как это не конкретный ответ, но я проверил и запустил ваш код, и он отлично работает для меня. Подстановка с фиксированным коэффициентом и степенью показывает, что скобки все в порядке и что вы (как я подозревал) не реинициализируете переменную resultArray во внутренней области видимости.

Это прямое копирование / вставка имеющегося у вас проблемного кода?

Обычно, когда у меня возникает проблема, подобная этой, это не имеет ничего общего с присваиванием, но вместо этого это происходит потому, что 'resultsArray' - это фактически две разные переменные, которые я ошибочно распределил, но из-за полиморфизма которых я не получаю ошибок.

...