2015-01-06 260 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的值存儲在第一行中,並在第二行中計算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 in 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不斷增長和增長。因爲僅在此循環第二次迭代後纔打印第二行,則會看到錯誤的值。

你不應該有這個循環。