繁体   English   中英

“如果(int == 1)”不起作用

[英]“if (int == 1)” doesn't work

因此,我正在尝试学习Java,并且已经基于21个比赛游戏编写了一个基本程序; 每个玩家轮流参加1,2或3场比赛。 参加最后一场比赛的玩家输了。

一切顺利,直到我发现当用户即将获胜时,该程序才不会进入最终的else if语句。 它会跳过它并返回给用户,而计算机不会进行任何匹配。 附件是我为计算机转写的方法。

public static int ComputerPlays(int matches){ //Method for the computers turn
    int matchesTaken = 0;

    if (matches > 7){ matchesTaken = new Random().nextInt(3)+1; }
    else if (matches > 4 && matches < 8){ matchesTaken = matches - 4; }
    else if (matches < 5){ matchesTaken = matches - 1; }
    else if (matches == 1){ matchesTaken = 1; }

    System.out.println("Computer takes " + matchesTaken + " matches");
    return(matches - matchesTaken);
}

该行else if (matches == 1){ matchesTaken = 1; } else if (matches == 1){ matchesTaken = 1; }是我遇到问题的地方。 任何帮助,将不胜感激。

PS:我意识到我可以将else if转换为else语句,但是最主要的是我想了解问题所在,而不仅仅是解决它。

您应在(matches < 5)条件之前移动(matches == 1) 直到(matches == 1)都无法访问该代码,因为此条件也由(matches < 5)满足。

更新的代码:

public static int ComputerPlays(int matches){ //Method for the computers turn
    int matchesTaken = 0;

    if (matches > 7){ matchesTaken = new Random().nextInt(3)+1; }
    else if (matches > 4 && matches < 8){ matchesTaken = matches - 4; }
    else if (matches == 1){ matchesTaken = 1; }
    else if (matches < 5){ matchesTaken = matches - 1; }

    System.out.println("Computer takes " + matchesTaken + " matches");
    return(matches - matchesTaken);
}

匹配数<5将始终在匹配== 1之前到达,这意味着它将永远不会触发第二个if。 因此,您可以更改if的顺序,或者在小于5的ie中添加另一个参数(匹配数<5 &&匹配数> 1)。

条件(matches == 1)将不可用,因为您的上一个条件始终会使您以后的条件成立,即, if (matches < 5)实际上认为matches == 1 您可以将最后两个条件设为:

else if (matches < 5 && matches != 1){ matchesTaken = matches - 1; }
    else if (matches == 1){ matchesTaken = 1; }

或喜欢

else if (matches < 5 && matches > 1){ matchesTaken = matches - 1; }
    else if (matches == 1){ matchesTaken = 1; }

您的问题是该声明

else if (matches < 5){ matchesTaken = matches - 1; }

当匹配为1时将为true。因此,永远不会输入else if。 您可以将其更改为

else if (matches < 5 && matches != 1){ matchesTaken = matches - 1; }

这样,当匹配数为1并且下一个块可以成功执行时,它将不会触发。

else if (matches == 1){ matchesTaken = 1; }

之前

else if (matches < 5){ matchesTaken = matches - 1; }

顺序很重要。 在IF_ELSE中,一旦发生匹配,就不会检查下一个条件。 在您的情况下, matches<5为true时,将不检查matches==1

您已经检查过else if (matches < 5)那么它是无用的检查
else if (matches == 1) ,因为上述条件将终止if链。 因此,您可以将else if (matches < 5)更改为else if (matches < 5 && matches !=1)以使最后一条语句也可访问。

如果您使用else if,则首先使用相等条件(==),然后使用大于或等于(X> = Y)或小于或等于(X <= Y)的条件。

首先满足条件的语句将被执行,如果语句将被忽略,则其余条件将被执行。

编码愉快!

if (matches > 7){ matchesTaken = new Random().nextInt(3)+1; }
else if (matches > 4 && matches < 8){ matchesTaken = matches - 4; }
else if (matches < 5){ matchesTaken = matches - 1; }
else if (matches == 1){ matchesTaken = 1; }

在您的代码中首先执行else if (matches < 5){ matchesTaken = matches - 1; } else if (matches < 5){ matchesTaken = matches - 1; }

该行执行第一,这条线也满足了,如果matches == 1 ,这就是为什么它永远不会进入到下一行( else if (matches == 1){ matchesTaken = 1; }matches == 1

1小于5。这意味着当matchs等于1时,它将始终在语句“否则,如果(matches <5){matchesTaken = matchs-1;}”中捕获。

这就是从未执行(matches == 1)的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM