[英]“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.