Java | boolean不';t重新评估/更新
我试着制作一个类,让你重复一个任务一定的次数,或者直到满足一个条件。在继续之前,请考虑以下内容:Java | boolean不';t重新评估/更新,java,loops,boolean,repeat,evaluation,Java,Loops,Boolean,Repeat,Evaluation,我试着制作一个类,让你重复一个任务一定的次数,或者直到满足一个条件。在继续之前,请考虑以下内容: int test = 0; 我的复课: public static abstract class Repeat { public void loop(int c) { for (int i = 0; i < c; i++) { run(); } } public void until(boolean c) {
int test = 0;
我的复课:
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();
}
这改变了测试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)
中传递的布尔值永远不会更新,因此,如果这是正确的,有人能告诉我如何更新它吗?如果我的假设是错误的,是什么原因导致了这一点?我该如何修复它
多亏了真正阅读我“键入”的每个单词(大部分是复制粘贴的)的人。你从test=0开始,你的程序只会递减test。所以在第一个if子句its-1中,它们-2。。。。从test=0开始,您的程序只对test进行递减,它永远不会为0。所以在第一个if子句its-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();
}
公共静态抽象类重复{
公共无效循环(INTC){
对于(int i=0;i
返回是否希望继续循环
isLooping()
将允许您更新您的布尔值。当您通过方法传递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();
}
公共静态抽象类重复{
公共无效循环(INTC){
对于(int i=0;i
返回是否希望继续循环通过
isLooping()
将允许您更新您的布尔值。当执行直到(test==0)时,test==0的值为false代码>。因此,您将false
传递给until()
,并在until()
中传递的值!因此,c
是正确的,永远不会改变
您似乎认为,将布尔表达式传递给方法会使该方法在每次计算c
时都重新计算该表达式。这不是它的工作原理。在调用方法之前对表达式求值,并传递该表达式的值。当执行直到(test==0)时,test==0的值为false代码>。因此,您将false
传递给until()
,并在until()
中传递的值!因此,c
是正确的,永远不会改变
您似乎认为,将布尔表达式传递给方法会使该方法在每次计算c
时都重新计算该表达式。这不是它的工作原理。在调用该方法之前对表达式求值,并传递该表达式的值。实际上否。在我的代码中,首先我有一个循环块,它将“test”增加到10,然后是一个until块,它应该将其减少回零。是否尝试使测试为静态?实际上否。在我的代码中,首先,我有一个循环块,它将“test”增加到10,然后是一个until块,它应该将它减少到零。尝试使测试保持静态?我没有直接使用您的答案,但它最终让我找到了正确的解决方案。谢谢我并没有直接使用您的答案,但它最终让我找到了正确的解决方案。谢谢