作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是想要一些解释(为什么)以下代码不起作用以及使代码运行的解决方案(如何)。
该程序的目标是获取用户输入的扑克牌,J、Q、K、A、小写或大写。程序必须只接受这些值之一,因此需要验证用户输入,在错误时显示并提示,直到输入接受的值为止。然后,程序必须获取用户输入的值并将扑克牌的名称打印到控制台上:Jack、Queen、King、Ace。
package practical_1;
import static java.lang.System.out;
import java.util.Scanner;
public class Question_4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String Usr_Card;
out.print("Enter Card Letter Here.... ");
Usr_Card = input.next();
Usr_Card = Usr_Card.toUpperCase();
while (Usr_Card != "K" || Usr_Card != "Q" || Usr_Card != "J" || Usr_Card != "A"){
out.print("Invalid Input\nEnter Valid Card Letter Here: ");
Usr_Card = input.next();
Usr_Card = Usr_Card.toUpperCase();
}
switch (Usr_Card) {
case ("J"):
out.print("Jack");
break;
case ("Q"):
out.print("Queen");
break;
case ("K"):
out.print("King");
break;
case ("A"):
out.print("Ace");
break;
}
}
}
最佳答案
或运算符||如果任何部分为 true,则返回 true。在您的示例中,如果卡不是 K 或不是 Q 或不是 J 或不是 A,则继续循环。
让我们来分解一下。用户输入“K”
Usr_Card != "K" // false
Usr_Card != "Q" // true
Usr_Card != "J" // true
Usr_Card != "A" // true
false || true || true || true === true // continue the loop
我们真正想要检查的是输入是否无效。当输入与 K、Q、J 或 A 中的至少一个不匹配时,输入无效。或者更好的说法是,当不是 K AND 不是 Q 、不是 J 和不是 A 时。
我们只需更改 || 的条件即可到 &&。相同的例子
Usr_Card != "K" // false
Usr_Card != "Q" // true
Usr_Card != "J" // true
Usr_Card != "A" // true
false && true && true && true === false // do not continue the loop
while (Usr_Card != "K" && Usr_Card != "Q" && Usr_Card != "J" && Usr_Card != "A")
让我们尝试一个无效的示例。使用输入“A”
Usr_Card != "K" // true
Usr_Card != "Q" // true
Usr_Card != "J" // true
Usr_Card != "A" // true
true && true && true && true === true // continue the loop
正如您所看到的,由于我们的 AND && 操作,我们仅在不匹配任何有效字符时才继续循环。
正如 Scary Wombat 所指出的,您不应该将 ==
或 !=
与字符串一起使用。您应该使用 .equals
while( !Usr_Card.equals("K") && !Usr_Card.equals("Q") && !Usr_Card.equals("J") && !Usr_Card.equals("A") )
关于java - While 循环不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49642879/
我是一名优秀的程序员,十分优秀!