我写了一个程序,将“掷骰子”并告诉你需要多少转才能获得yahtzee。这有效,但当它要求你再次出现时有一个问题。它会继续给我一个“无效输入”,实际上我输入的东西应该退出循环。这是我的代码,循环从第24-34行开始,但我会把它全部放在以前它是一个问题。
import java.util.Scanner;
import java.util.Random;
public class Yahtzee {
public static void main(String[] args){
int d[] = {0,0,0,0,0};
int x = 0;
Scanner s = new Scanner(System.in);
Random r = new Random();
while (1!=0){
d[0] = r.nextInt(6);
d[1] = r.nextInt(6);
d[2] = r.nextInt(6);
d[3] = r.nextInt(6);
d[4] = r.nextInt(6);
x+=1;
if (d[0]==d[1] && d[0]==d[2] && d[0]==d[3] && d[0]==d[4]) {
System.out.println("You got yahtzee, every dice showed " + Integer.toString(d[0]));
System.out.println("It only took " + Integer.toString(x) + " turns");
while (1!=3) {
System.out.print("Go again? y/n: ");
String ans = s.nextLine();
if (ans.toLowerCase()=="n"){
System.exit(0);
} else if (ans.toLowerCase()=="y") {
break;
} else {
System.out.println("Invalid input!");
}
}
}
}
}
}
老实说,我无法弄清楚这一点,尽管它可能非常明显。问题在哪里?
答案 0 :(得分:3)
使用.equals
来比较字符串,而不是等于运算符==
。
if (ans.toLowerCase().equals("n")){
System.exit(0);
} else if (ans.toLowerCase().equals("y")) {
等于运算符仅检查它们的内存位置是否相等,在这种情况下不是。
答案 1 :(得分:1)
使用String.equals
检查字符串内容。 ==
运算符依赖于引用相等性,因此前2个if语句表达式永远不会是true
。你可以:
if (ans.toLowerCase().equals("n")) {
System.exit(0);
} else if (ans.toLowerCase().equals("y")) {
break;
} else {
System.out.println("Invalid input!");
}
答案 2 :(得分:0)
以前的两个答案都是正确的,你必须使用String类'.equals方法。
程序中的==运算符实际上是比较2个String对象引用而不是字符串的内容。
对于刚开始使用Java的人来说,这是一个非常常见的错误。
有关详细信息,请参阅此处:http://www.java-samples.com/showtutorial.php?tutorialid=221