二维数组
Two dimensional array
我正在开发一个计算和绘制抛物线的小程序。但是我在需要计算值表的程序中卡住了一小部分。
二次函数如下: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 行 (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();
}
第一个错误是这样的:
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]
。然后你将它加一。
然后你计算updatedstartWaarde
.
的函数值
所以您的 waarden[0][j]
可能是 4.0
,但是您计算 5.0
的值 waarden[1][j]
而不是 4.0
。
你的另一个问题是你在循环这一行:
for(int i = 0; i < RIJEN; i++) {
我不知道RIJEN的价值是多少。但是您的 waarden
数组应该只有两行。一旦你一次又一次地经历这个循环,startWaarde
就会不断增长。因为您仅在此循环第二次迭代后才打印第二行,所以您会看到错误的值。
你根本不应该有这个循环。
我正在开发一个计算和绘制抛物线的小程序。但是我在需要计算值表的程序中卡住了一小部分。
二次函数如下: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 行 (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();
}
第一个错误是这样的:
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]
。然后你将它加一。
然后你计算updatedstartWaarde
.
所以您的 waarden[0][j]
可能是 4.0
,但是您计算 5.0
的值 waarden[1][j]
而不是 4.0
。
你的另一个问题是你在循环这一行:
for(int i = 0; i < RIJEN; i++) {
我不知道RIJEN的价值是多少。但是您的 waarden
数组应该只有两行。一旦你一次又一次地经历这个循环,startWaarde
就会不断增长。因为您仅在此循环第二次迭代后才打印第二行,所以您会看到错误的值。
你根本不应该有这个循环。