【问题标题】:Update variable when break the while中断时更新变量
【发布时间】:2018-01-03 13:15:48
【问题描述】:

我的目标:只在布尔值 a=trueb=true 时执行“stuffT”。

class myClass
{
    public static void main (String [] args)
    {
        boolean a=true,b=true;
        while (condition)
        {
            if (conditionA){a=false;break;}
            else if(conditionB){b=false;break;}
        }
        if (a==true && b==true)
        {
            //do stuffT
        }
    }
}

但是在遇到break; 的值ab 之后仍然是true。导致我的do 'stuffT' 发生(当它不应该发生时,如果ab 具有false 值)

我尝试先将ab 设置为null,然后在breakwhile 时更新它们的值,如下所示:

boolean a,b;
while (condition)
{
   if (conditionA){a=false;break;}
   else if(conditionB){b=false;break;}
}
if (a==true && b==true)
{
    //do stuffT
}

但是我得到了错误: 变量a可能没有被初始化

也曾尝试先break;,然后像这样更新它们的值:

if (conditionA){break;a=false;}
else if(conditionB){break;b=false;}

但得到错误: 无法访问的语句(用于在break; 之后更新变量)

那么我该如何实现我的目标

【问题讨论】:

  • 您确定conditionAconditionB 发生一次吗?在a=false 之后放一个System.out.println("a");,b 也一样,以确保两者之一发生
  • 条件从何而来,您确定甚至进入了while循环吗?还有条件A和条件B
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example
  • 我确定conditionAconditionB 会发生,因为在我的“实际”代码中,break; 通知“已经满足条件A”或“已经满足条件B”
  • 您能否添加print 并测试;)确定不是condition 停止循环?因为如果你仅仅因为条件A或条件B而退出循环,你将永远不会做“东西”,所以condition可能暂时是假的

标签: java variables while-loop break


【解决方案1】:

您的代码(第一个)没问题。通过将conditionAconditionB 替换为硬编码的true 值来检查它。调试评估您的条件的过程(conditionAconditionB)。 还要检查conditionAconditionB 是否都为真,否则你将面临无法摆脱循环的风险(取决于你如何评估condition

【讨论】:

  • 调试命题不是答案
  • @azro 我的回答是“代码没问题”。它符合问题中声明的目标。它有什么问题?
  • 他说他有问题,我没有看到你的帖子中有任何处理这个问题的文字,你只是说“你的代码看起来不错”,这并没有为整个页面提供任何信息,之后不会帮助任何人
【解决方案2】:

下面是代码。我只是假设条件。如果你将 a 和 b 都设置为 true,它会跳过 while 并转到 if 循环

public class testClass {


        public static void main (String [] args)
        {
            boolean a=true,b=false;
            while ((!a && b) || (a && !b)) {
                System.out.println("a or b is false");
                if (!a) {
                    a=true;
                    System.out.println("a is false");
                    break;
                }
                if (!b) {
                    b=true;
                    System.out.println("b is false");
                    break;
                }
            }
            if (a && b) {
                System.out.println("Both are true");
            }

        }
}

【讨论】:

  • 你只是改变了外观,而不是答案
  • 我认为目标是“当两者都为真时做事”,这就是我通过我的代码所描述的
  • 是的,但显然问题是其他的,你给出相同的代码^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 2020-10-04
  • 2021-07-18
  • 2019-07-13
  • 1970-01-01
  • 2015-01-17
相关资源
最近更新 更多