Java | boolean不会重新评估/更新

Joh*_* S. 1 java evaluation loops boolean repeat

我正在努力创建一个让你重复任务一定次数的课程,或直到满足条件.在继续之前,请考虑以下事项:

int test = 0;
Run Code Online (Sandbox Code Playgroud)

我的重复课:

public static abstract class Repeat {

    public void loop(int c) {
        for (int i = 0; i < c; i++) {
            run();
        }
    }

    public void until(boolean c) {
        while (!c) {
            run();
        }
    }

    public abstract void run();
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是until(boolean c)方法,而不是loop(int c)方法.该循环方法工作得很好,如下证明:

public static void main(String[] args) {
    new Repeat() {
        @Override
        public void run() {
            test += 1;
            System.out.println(test); // so I know what test currently is
        }
        {
            loop(10);
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

这改变了测试1次,10次.控制台证明正确:

1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

现在为了这个问题.如果我尝试使用该until()方法,如果我不在几秒钟内终止发射,它将变得迟钝,因为它将test无限增加.

public static void main(String[] args) {
    new Repeat() {
        @Override
        public void run() {
            test += 1;
            System.out.println(test); // so I know what test currently is
        }
        {
            loop(10);
        }
    };
    new Repeat() {
        @Override
        public void run() {
            test -= 1;
            System.out.println(test);
        }
        {
            until(test == 0);
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

这种情况永远存在.我的假设是,因为传入的布尔值(test == 0) 永远不会更新,所以,如果这是正确的,任何人都可以告诉我如何更新它?如果我的假设是错误的,是什么导致了这一点,我该如何解决?

感谢任何人实际阅读我"键入"的每个单词(大多数是复制粘贴的).

Add*_*ump 5

当您通过方法在Java中传递基元时,它会传递值,这意味着您只传递truefalse从未更新,因为它只是一个值.但是,如果你做了类似下面的事情,它应该有效:

public static abstract class Repeat {
    public void loop(int c) {
        for (int i = 0; i < c; i++) {
            run();
        }
    }

    public void until() {
        while (isLooping()) {
            run();
        }
    }

    public abstract void run();
    public abstract boolean isLooping();
}
Run Code Online (Sandbox Code Playgroud)

返回是否要继续循环isLooping()将允许您更新您的布尔值.