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) 永远不会更新,所以,如果这是正确的,任何人都可以告诉我如何更新它?如果我的假设是错误的,是什么导致了这一点,我该如何解决?
感谢任何人实际阅读我"键入"的每个单词(大多数是复制粘贴的).
当您通过方法在Java中传递基元时,它会传递值,这意味着您只传递true或false从未更新,因为它只是一个值.但是,如果你做了类似下面的事情,它应该有效:
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()将允许您更新您的布尔值.