我觉得我的代码是正确的,但每次运行它都没有打印出来。我错过了什么吗?此外,我想知道如果程序找到多项式的所有根,最多5个指数,如何使程序停止。我会创建一个包含5个不同值的数组吗?
public void bisection(){
this.x = 5;
this.y = calculateY(5);
while(this.y != 0) {
if (this.y < 0) {
this.lowerBound = x;
while (this.y <= 0) {
x--;
if (this.y < lowerBound) {
x++;
}
if (this.y > 0) {
this.upperBound = x;
}
}
double average = this.lowerBound + this.upperBound / 2;
this.y = calculateY(average);
if(this.y == 0){
System.out.println(average);
}else{
return;
}
}
if(this.y > 0) {
this.upperBound = x;
while(this.y >= 0) {
x--;
if(this.y > upperBound) {
x++;
}
if(this.y < 0) {
this.lowerBound = x;
}
}
double average = this.lowerBound + this.upperBound / 2;
this.y = calculateY(average);
if(this.y == 0){
System.out.println(average);
}else{
return;
}
}
}
}
}
答案 0 :(得分:2)
在最里面的while
循环中:
while (this.y <= 0) {
和
while(this.y >= 0) {
没有任何改变this.y
- 所以这些循环在输入后永远不会退出。
答案 1 :(得分:1)
除了@Andy Turner的答案外,外部while
也没有意义,它只会运行一次:
while(this.y != 0) {
y == 0
if (this.y < 0) {
[... inifinite loop cut off ...]
this.y = calculateY(average);
if(this.y == 0){
System.out.println(average);
}else{
return;
}
}
上方if
将打印并终止(y==0
),否则将使用return
退出该功能。在任何一种情况下,您都无法在外部while
中运行第二个循环。
if(this.y > 0) {
[ ... infinite loop2 cut off ... ]
this.y = calculateY(average);
if(this.y == 0){
System.out.println(average);
}else{
return;
}
}
较低的if
将打印并终止(y==0
),否则将使用return
退出该功能。在任何一种情况下,您都无法在外部while
中运行第二个循环。
因此,外部while
实际上是if(y != 0)
。