Java |布尔值不重新评估/更新
Java | boolean doesn't re-evaluate / update
我正在尝试制作一个 class 让您重复某项任务一定次数,或者直到满足条件为止。在继续之前,请考虑以下事项:
int test = 0;
我的重复 class:
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();
}
我遇到的问题是 until(boolean c)
方法,不是 loop(int c)
方法。 loop 方法工作得很好,如下所示:
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);
}
};
}
即改试1、10次。控制台证明正确:
1
2
3
4
5
6
7
8
9
10
现在是问题。 如果我尝试使用 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);
}
};
}
永远持续下去。我的假设是因为传入 (test == 0)
的布尔值永远不会更新,所以,如果那是正确的,谁能告诉我如何更新它?如果我的假设是错误的,是什么原因造成的,我该如何解决?
感谢 真正阅读了我的每一个字 "typed"(大部分是复制粘贴的)。
你从 test = 0 开始,你的程序只递减 test。所以一开始 if-clause 它的 -1 他们 -2 .... 它永远不会 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();
}
返回是否希望继续循环 isLooping()
将允许您更新您的布尔值。
执行until(test == 0);
时test == 0
的值为false。因此,您将 false
传递给 until()
,并且在 until()
内部,!c
的值因此是真实的并且永远不会改变。
您似乎认为将布尔表达式传递给方法会使该方法在每次计算 c
时重新计算表达式。它不是这样工作的。在调用方法之前计算表达式,并传递该表达式的 value。
我正在尝试制作一个 class 让您重复某项任务一定次数,或者直到满足条件为止。在继续之前,请考虑以下事项:
int test = 0;
我的重复 class:
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();
}
我遇到的问题是 until(boolean c)
方法,不是 loop(int c)
方法。 loop 方法工作得很好,如下所示:
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);
}
};
}
即改试1、10次。控制台证明正确:
1
2
3
4
5
6
7
8
9
10
现在是问题。 如果我尝试使用 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);
}
};
}
永远持续下去。我的假设是因为传入 (test == 0)
的布尔值永远不会更新,所以,如果那是正确的,谁能告诉我如何更新它?如果我的假设是错误的,是什么原因造成的,我该如何解决?
感谢 真正阅读了我的每一个字 "typed"(大部分是复制粘贴的)。
你从 test = 0 开始,你的程序只递减 test。所以一开始 if-clause 它的 -1 他们 -2 .... 它永远不会 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();
}
返回是否希望继续循环 isLooping()
将允许您更新您的布尔值。
执行until(test == 0);
时test == 0
的值为false。因此,您将 false
传递给 until()
,并且在 until()
内部,!c
的值因此是真实的并且永远不会改变。
您似乎认为将布尔表达式传递给方法会使该方法在每次计算 c
时重新计算表达式。它不是这样工作的。在调用方法之前计算表达式,并传递该表达式的 value。