Java 与while循环相同,但将条件放入while循环中不会';我不能做它需要做的事

Java 与while循环相同,但将条件放入while循环中不会';我不能做它需要做的事,java,Java,我有两个相同的while循环,逻辑很简单。如果值为7或参数,则应停止。它使用以下方法工作 while(true){ int值=骰子卷(); 如果(值==7 | |值==点){ 返回值; } 系统输出打印(值+“”); } 但是使用下面的方法,它也不能做它需要的事情。但它与上述方法基本相同 公共静态int第二阶段(int点){ int x=0; 而((骰子滚()!=7)| |(骰子滚()!=point)){ System.out.print(diceRoll()+“”); x=掷骰子(); }

我有两个相同的while循环,逻辑很简单。如果值为7或参数,则应停止。它使用以下方法工作

while(true){
int值=骰子卷();
如果(值==7 | |值==点){
返回值;
}
系统输出打印(值+“”);
}
但是使用下面的方法,它也不能做它需要的事情。但它与上述方法基本相同

公共静态int第二阶段(int点){
int x=0;
而((骰子滚()!=7)| |(骰子滚()!=point)){
System.out.print(diceRoll()+“”);
x=掷骰子();
}
返回x;
}

第二个
while
状况有两个主要问题

  • 您应该使用
    运算符,而不是
    运算符 要正确计算的布尔表达式
  • 包含
    diceRoll()
    的代码行太多。你可以做到 在给定的迭代中,只需一次调用即可实现目标
  • 更换您的
    while
    状况

    while((diceRoll()!=7)| |(diceRoll()!=point))

    while(x!=7&&x!=point)

    总的来说

    while(x != 7 && x != point) {
       x = diceRoll();
       System.out.print(x + " ");
    }
    

    应该有用

    我支持@DavidZimmerman的评论

    在您的while条件下有多个骰子点名可能会产生一些严重的逻辑错误。这些调用中的每一个都可能得到不同的结果,因此where子句将根本不一致

    要补充@VHS的答案:

  • 像在上一个代码块中一样初始化变量
  • intx=0;
    
  • 从where子句中取出diceRoll,并像以前一样调用diceRoll():
  • 其中(x!=7&&x!=点){
    //工作
    x=掷骰子();
    }
    
    在第二个循环中,您多次调用diceRoll(),它可能会在第二个while循环中返回不同的值,您需要一个&&而不是一个| |。如果diceRoll是7或点,我希望它终止,所以我不应该在这里使用或吗?为什么使用x是有效的,但仅仅使用方法调用是无效的?
    我希望它在掷骰子为7或点时终止
    -这也意味着你要继续掷骰子,直到x不是7且x也不等于点。不,如果x是7或x是点,则意味着终止。假设x是2。那么如果x!=7.终止。如果x!=我很困惑。如果x=7或x=point,你想继续掷骰子吗?我的道歉我之前对我的回答的评论把这一点弄糊涂了。VHS是正确的,在使用
    | |
    的情况下,只会计算第一个条件(如果为真)。要评估这两种情况,需要使用
    &&
    。是的,谢谢@VHS认为使用&&是有意义的,但对我来说| |是有意义的。你觉得怎么样?哦,事实上,很抱歉刚刚读了评论@我认为@VHS是对的。在这种情况下,将首先计算第一个条件,因为x不是7,所以它将继续。要计算这两个条件,必须使用
    &&
    ,否则它本质上是一个无限循环。这是非常令人困惑的,但是第一个使用while(True)的方法,如果(x==7 | | x==point)是正确的,那么
    =是让人困惑的原因。(这也让我一时糊涂)。当您对条件求反时,您必须对二进制运算符求反以保留相同的结果。虽然您所说的是正确的,而且可能会起作用,但我建议在where子句中包含该条件,因为这是一种更干净、更好的编码实践。