2015-01-06 4 views
0

Я работаю над небольшой программой для вычисления и рисования параболы. Но я застрял в небольшой части программы, где мне нужно рассчитать ценность.Двумерный массив

Квадратичная функция следующая: y = a * (x - alpha)² + Beta.

Так что, если я воспользуюсь следующими значениями для этой функции: y = 2 * (x - 1)² + (-12). Мне нужно стать этой таблицей значений:

x | -4,0 | -3,0 | -2,0 | -1.0 | 0.0 | 1.0 | 2.0 | 3,0 | 4.0 |

y | 38,0 | 20,0 | 6.0 | -4,0 | -10,0 | -12,0 | -10,0 | -4,0 | 6.0 |

Мне удалось получить первую строку справа, но вторая строка (та, которая вычисляет значения te), является абсолютно неправильной.

public double[][] berekenWaardentabel(int input[], int AANTALKOLOMMEN, double startWaarde) { 
    double[][] waarden = new double[RIJEN][AANTALKOLOMMEN]; 

    System.out.println(waarden.length); 
    System.out.println(startWaarde + "\n"); 

    for(int i = 0; i < RIJEN; i++) { 
     for(int j = 0; j < AANTALKOLOMMEN; j++) { 
      waarden[0][j] = startWaarde++; //value of first row (start from -4.0, counts upwards) 
      waarden[1][j] = input[0] * (Math.pow((startWaarde - input[1]), 2)) + input[2]; 
      System.out.print(waarden[i][j] + " "); 
     } 
     System.out.println(); 
    } 
    return waarden; 
} 

Это выход я получаю:

-4,0 -3,0 -2,0 -1,0 0,0 1,0 2,0 3,0 4,0 5,0 6,0

86,0 | 116.0 | 150,0 | 188,0 | 230,0 | 276,0 | 326,0 | 380,0 | 438,0 | 500,0 | 566.0

Кто-нибудь знает, как решить эту проблему? Благодаря!

+0

Попробуйте отладить код. Вы должны увидеть шаг за шагом, что происходит с содержимым ваших переменных. –

+0

startWaarde следует повторно инициализировать до -4 в вашем первом цикле, иначе вы заполните вторую строку, начиная с 8 вместо -4. – StephaneM

+0

Мне удалось найти ответ, чтобы правильно рассчитать, но у меня все еще есть одна небольшая проблема. Решение каждого расчета еще не в правильном порядке. Я получаю ROW1: -4.0 | -3,0 | -2,0 | -1.0 | 0.0 | 1.0 | 2.0 | 3,0 | 4.0 | 5,0 | 6,0. ROW2: 20.0 | 6.0 | -4,0 | -10,0 | -12,0 | -10,0 | -4,0 | 6.0 | 20,0 | 38,0 | 60,0. В то время как -4.0 равно 38, а -3,0 - 20. Таким образом, им нужно переместить 1, чтобы находиться в правильном положении. – Lorenzo

ответ

1

Вы должны ошибок:

вы хотите, чтобы заполнить две строки вашего массива (0-й (х) и первого (у)). Затем вы сохраняете значение x в первой строке и вычисляете y (x + 1) во второй строке.

вам нужно заполнить ваш массив с:

for (int j = 0; j < AANTALKOLOMMEN; j++) { 
    waarden[0][j] = startWaarde; // value of first row (start from -4.0, counts upwards) 
    waarden[1][j] = input[0] * (Math.pow((startWaarde - input[1]), 2)) + input[2]; 
    startWaarde++; 
} 

Затем вы можете отобразить ваши ценности:

for (int i = 0; i < 2; i++) { 
    for (int j = 0; j < AANTALKOLOMMEN; j++) { 
     System.out.print(waarden[i][j] + " "); 
    } 
    System.out.println(); 
} 
0

Первая ошибка заключается в следующем:

 waarden[0][j] = startWaarde++; //value of first row (start from -4.0, counts upwards) 
     waarden[1][j] = input[0] * (Math.pow((startWaarde - input[1]), 2)) + input[2]; 

Ставишь значение startWaarde в waarden[0][j]. И затем вы увеличиваете его на единицу.

Затем вы вычисляете значение функции для обновленоstartWaarde.

Так что ваши waarden[0][j], пожалуй, 4.0, но вычислить значение waarden[1][j] для 5.0, а не 4.0.

другая Ваша проблема заключается в том, что вы зацикливание с этой линией:

for(int i = 0; i < RIJEN; i++) { 

Я не знаю, что значение Rijen есть. Но ваш массив waarden должен иметь только две строки. Как только вы проходите цикл снова и снова, startWaarde продолжает расти и расти.Поскольку вы печатаете вторую строку только после того, как этот цикл повторяет второй раз, вы видите неправильные значения.

Вы не должны иметь этот цикл вообще.

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