尝试对输入多项式进行二分法,卡在永久循环中

时间:2016-03-16 23:09:42

标签: java

我觉得我的代码是正确的,但每次运行它都没有打印出来。我错过了什么吗?此外,我想知道如果程序找到多项式的所有根,最多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;
            }
        }
    }
}

}

2 个答案:

答案 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)