所以我正在努力学习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; }
行是我遇到问题的地方。任何帮助将不胜感激。
P.S。我意识到我可以将else if
变成else
语句,但主要的是我想知道问题是什么,而不仅仅是绕过它。
答案 0 :(得分:2)
您应该在(matches < 5)
条件之前移动(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);
}
也满足此条件。
更新代码:
{{1}}
答案 1 :(得分:0)
比赛&lt;总是会到达5之前匹配== 1意味着它永远不会触发第二个if。所以要么改变if的顺序,要么将另一个参数添加到你的小于5,即匹配&lt; 5&amp;&amp; match&gt; 1)。
答案 2 :(得分:0)
条件(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; }
答案 3 :(得分:0)
你的问题是声明
else if (matches < 5){ matchesTaken = matches - 1; }
当匹配为1时,将为真。因此,将永远不会输入else。您可以将其更改为
else if (matches < 5 && matches != 1){ matchesTaken = matches - 1; }
这样,当匹配数为1并且后续块可以成功执行时,它不会触发。
答案 4 :(得分:0)
把
else if (matches == 1){ matchesTaken = 1; }
之前
else if (matches < 5){ matchesTaken = matches - 1; }
订单很重要。在IF_ELSE中,一旦匹配发生,它不会检查下一个条件。在您matches<5
为真的情况下,它不会检查matches==1
。
答案 5 :(得分:0)
您已经检查了else if (matches < 5)
然后它无用的检查
else if (matches == 1)
,因为上述条件将结束if链。所以你可以改变
else if (matches < 5)
来
else if (matches < 5 && matches !=1)
使最后一个语句也可以访问。
答案 6 :(得分:0)
当你使用else if时,首先使用相等的条件(==)然后去大于或等于(X> = Y)或小于或等于(X <= Y)条件。
首先满足条件的语句将执行,如果语句将忽略,则执行其余的其他语句。
快乐的编码!
答案 7 :(得分: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; }
在您的代码中首先执行else if (matches < 5){ matchesTaken = matches - 1; }
此行首先执行,此行也满足matches == 1
,这就是为什么在else if (matches == 1){ matchesTaken = 1; }
matches == 1
)
答案 8 :(得分:0)
1小于5.这意味着当匹配等于1时,它将始终在语句中捕获&#34;否则if(匹配&lt; 5){matchesTaken = matches - 1; }&#34 ;.
这就是为什么(匹配== 1)永远不会被执行的原因。