我正在尝试使用嵌套的forloops求解方程式。
我试图在等式(-25)i +(14)j +( - 8)k = -77中求解(i,j,k)。规范是-77。
我一直在尝试调试它,但无法找到我的算法的问题。
这是我的代码:
int newx = -20; int newy = -20; int newz = -20;
test = true;
while(test){
for(int i = 0; i < 20; i++){
if((f[0]*(newx+i) + f[1]*newy + f[2]*newz) == norm){
System.out.println(f[0]*(newx+i) + f[1]*newy + f[2]*newz);
} else {
for(int j = 0; j < 20; j++){
if((f[0]*(newx) + f[1]*(newy+j) + f[2]*newz) == norm){
System.out.println((f[0]*(newx) + f[1]*newy+j + f[2]*newz));
} else {
for(int k = 0; k < 20; k++){
if((f[0]*(newx) + f[1]*(newy) + f[2]*(newz+k)) == norm){
System.out.println((f[0]*(newx) + f[1]*newy + f[2]*newz+k));
}
}
}
}
}
}
}
答案 0 :(得分:2)
您的方法总体上是错综复杂的。您尝试获取i
,j
和k
的值。所以保持简单!
首先,您需要测试每个可能的组合,因此三重嵌套for循环是有意义的。然后,您将需要运行计算并测试输出。如果输出为-77
,则您已为i
,j
和k
找到一个解决方案。因此,将其分解为我们已经达到的阶段。
i
,j
和k
。i
,j
和k
插入公式。output
为-77
,请打印结果。 现在我们知道了阶段,让我们把它变成一些代码。
for(int i = 0; i < 20; i++) {
for(int j = 0; j < 20; j++) {
for(int k = 0; k < 20; k++) {
// Go through each value.
int output = (-25 * i) + (14 * j) + (-8 * k);
// Plug the values into the formula.
if(output == -77) {
// Test and output.
System.out.println("i = " + i + ", j = " + j + ", k = " + k);
}
}
}
}
现在,您不知道将要获得多少解决方案,因此我将创建另一个名为Solution
的类。
public class Solution {
private int i;
private int j;
private int k;
// Appropriate constuctor and getters.
}
这样,当你需要保存它时,你可以说。
List<Solution> mySolutions = new ArrayList<Solution>();
// Nested for loops.
mySolutions.add(new Solution(i, j, k)); // Provided that you wrote the constructor
您可以覆盖toString
对象中的Solution
方法以打印出合理的输出。
public String toString() {
return "i =" + i + ", j =" + j + ", k =" + k;
}
因此,当您输出时,它看起来像......
i = 1, j = 2, k = 10
i = 1, j = 6, k = 17
i = 3, j = 1, k = 2
查看..
答案 1 :(得分:1)
您正在错误地评估内部if
条件,例如:
for(int j = 0; j < 20; j++){
if((f[0]*(newx) + f[1]*(newy+j) + f[2]*newz) == norm){
System.out.println((f[0]*(newx) + f[1]*newy+j + f[2]*newz));
}
[...]
}
您忘记将i
添加到newX
,它应该是f[0] * (newx + i)
。这适用于if
条件以及println(...)
。如果你纠正了这些错误,你就找到了解决方案。
摆脱无限循环:
while
循环&& test
添加到每个for
循环条件test = false;
- 正文if
(这个解决方案既快又脏,但我会让你弄明白,如何以更合适的方式解决它。)
要获得更优雅的整体解决方案,请查看christoper's answer。在那里,您可以找到(从软件工程师的角度来看)清洁解决方案,以及您可能想要的一些扩展。