提问人:Jabri Juhinin 提问时间:11/18/2021 最后编辑:Jabri Juhinin 更新时间:11/20/2021 访问量:114
当总和值为“8”时的结果应该是偶数,但它说奇数 [更新:“else”分支似乎不起作用,当总和为奇数时,它是 nt wrkg] [已关闭]
Result when the sum value is '8' should be even, yet it says odd [Update : the 'else' branch seems not working, when the sum is odd, it's nt wrkg] [closed]
问:
我已经看了几个小时我写的代码了。我尝试查看其他人的解决方案,比较并应用于我的代码,但我的代码仍然无法正常工作。我尝试检查缩进,更改 with ,但我的代码仍然无法按预期工作。你能看看我的代码吗?name2.equals()
name2.equalsIgnoreCase()
import java.util.*;
import java.util.Scanner;
public class OddsAndEvens {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Let's play a game called \"Odds and Evens\"");
System.out.println("What is your name? ");
String name = input.next();
System.out.println("Hi "+name+", which do you choose? (O)dds or (E)vens?");
String name2 = input.next();
if (name2.equals("O")) {
System.out.println(name+" has picked "+name2+"! The computer will be evens.");
} else if (name2.equals("E")) {
System.out.println(name+" has picked "+name2+"! The computer will be odds.");
}
else {
System.out.println("Please pick either odds or evens!");
}
System.out.println("-----------------------------------------------------------");
System.out.println("How many \"fingers\" do you put out?");
int userNumber = input.nextInt();
Random rand = new Random();
int computer = rand.nextInt(6);
System.out.println("The computer plays number "+computer);
System.out.println("-----------------------------------------------------------");
int sum = computer + userNumber;
System.out.println("The sum is "+ sum);
boolean oddOrEven = sum % 2 == 0;
if (oddOrEven) {
if (name2.equals("E")) {
System.out.println(sum+" is even..!");
System.out.println(name+" wins!");
} else if (name2.equals("O")) {
System.out.println(sum+" is odd..!");
System.out.println("The computer wins!");
}
else {
System.out.println(sum+" is odd..!");
if (name2.equals("E")) {
System.out.println("The computer wins!");
} else if (name2.equals("O")) {
System.out.println(name+" wins!");
}
}
}
System.out.println("-----------------------------------------------------------");
}
}
答:
在评估游戏结果时,您会遇到多个问题。
缩进和大括号
首先,您在整个结构中放置大括号是错误的。这意味着您的块属于(如果格式正确)内部子句。(另一个答案在这里更详细,因此我不会进一步详细说明这个问题)if
else
if (name2.equals("E"))
要解决此问题,请在整个外部子句的末尾添加一个右大括号,并删除一个大括号。else
if
打印不正确的输出
此外,您的块中有一个问题:if
if (oddOrEven) {
...
}
是在游戏结果为“偶数”的情况下执行的代码。(你绝对应该重命名你的 ,例如,因为你只是把自己和当前的变量名混淆了)...
boolean
isEven
因此,详细地,以下代码片段中评论了该问题:
if (name2.equals("E")) {
System.out.println(sum+" is even..!");
System.out.println(name+" wins!");
} else if (name2.equals("O")) {
System.out.println(sum+" is odd..!"); // <--- this is incorrect
System.out.println("The computer wins!");
}
所以你实际上在做正确的事情,但你的输出是不正确的。
根据以下逻辑更新此代码片段:else
System.out.println(sum+" is even..!");
if (name2.equals("E")) {
System.out.println(name+" wins!");
} else if (name2.equals("O")) {
System.out.println("The computer wins!");
}
结论
将所有建议汇总到一个代码片段中:
if (isEven) {
System.out.println(sum + " is even..!");
if (name2.equals("E")) {
System.out.println(name + " wins!");
} else if (name2.equals("O")) {
System.out.println("The computer wins!");
}
} else {
System.out.println(sum + " is odd..!");
if (name2.equals("E")) {
System.out.println("The computer wins!");
} else if (name2.equals("O")) {
System.out.println(name + " wins!");
}
}
评论
仔细看看你的缩进:
if (oddOrEven) {
if (name2.equals("E")) {
System.out.println(sum+" is even..!");
System.out.println(name+" wins!");
}
else if (name2.equals("O")) {
System.out.println(sum+" is odd..!");
System.out.println("The computer wins!");
}
else {
System.out.println(sum+" is odd..!");
if (name2.equals("E")) {
System.out.println("The computer wins!");
} else if (name2.equals("O")) {
System.out.println(name+" wins!");
}
}
}
如果我们正确地重新缩进它,问题就会变得更加明显:
if (oddOrEven) {
if (name2.equals("E")) {
System.out.println(sum+" is even..!");
System.out.println(name+" wins!");
}
else if (name2.equals("O")) {
System.out.println(sum+" is odd..!");
System.out.println("The computer wins!");
}
else {
System.out.println(sum+" is odd..!");
if (name2.equals("E")) {
System.out.println("The computer wins!");
}
else if (name2.equals("O")) {
System.out.println(name+" wins!");
}
}
}
仅当 既不是 也不是 时,才执行分支。然后在分支中,表示为奇数,但当总和为偶数时,父语句为 为 true。然后再次与 和 进行比较,但这已经完成了。else
name2
E
O
else
sum
if
if (oddOrEven)
name2
E
O
这一切都非常令人困惑。你应该停止写一个很长的方法,因为这些东西很容易混淆,而是利用方法。
例如,您可以创建一个方法,该方法同时接受计算机输入和用户输入,如果总和为偶数,则返回:true
public static boolean isEven(int userInput, int computerInput) {
int sum = userInput + computerInput;
boolean sumIsEven = sum % 2 == 0;
return sumIsEven;
}
然后,您可以创建另一个方法,该方法接受选定的奇偶校验(奇数或偶数)和用户输入,然后返回用户是否获胜。它也可以利用上述方法:
// Capture the selected parity and set the boolean to the corresponding
// value.
// If the user enters neither 'E' or 'O', the program should not continue,
// instead, the user should be asked again to enter a correct parity.
boolean userSelectedParityIsEven = ...;
Random r = new Random();
int computer = rand.nextInt(6);
// Capture user-provided number here.
int userInput = ...;
boolean sumIsEven = isEven(userInput, computer);
if (sumIsEven) {
System.out.println("The sum is even!");
}
else {
System.out.println("The sum is odd!");
}
boolean match = (sumIsEven == userSelectedParityIsEven);
if (match) {
System.out.println(name + " wins!");
}
else {
System.out.println("The computer wins!");
}
评论
if (oddOrEven) {
sum+" is even"
sum+" is odd"
oddOrEven
true
sum
sumIsEven
else