我对java比较陌生,我试图在Eclipse中编写一个程序,当用户键入'r'时,它会随机选择一把枪来“给”他们五枪之一......有点像“使命召唤僵尸”中的神秘盒子。我很困惑为什么在输入'r'之后它不会输出一个随机的“枪”。请帮忙!!!
import java.util.Random;
import java.util.Scanner;
class apples{
public static void main(String[] args){
System.out.println("Type 'r' for a random gun");
Random dice = new Random();
int number;
Scanner input = new Scanner(System.in);
String userinput = input.nextLine();
if (userinput=="r"){
for (int counter=1; counter<=1; counter++){
number = 1+dice.nextInt(5);
if (number==1){
System.out.println("gun 1");
}else if (number==2){
System.out.println("gun 2");
}else if (number==3){
System.out.println("gun 3");
}else if (number==4){
System.out.println("gun 4");
}else if (number==5){
System.out.println("gun 5");
}
}
}else{
System.out.println(" ");
}
}
}
答案 0 :(得分:1)
尝试使用
int randomInt = dice.nextInt(4);
if(userInput.equals("r")){
if (randomInt==1){
System.out.println("gun 1");
}else if (randomInt==2){
System.out.println("gun 2");
}else if (randomInt==3){
System.out.println("gun 3");
}else if (randomInt==4){
System.out.println("gun 4");
}else if (randomInt==5){
System.out.println("gun 5");
}
}
所以整体最终代码应该是
public class test {
public static void main(String[] args) {
System.out.println("Type 'r' for a random gun");
Random dice = new Random();
int number;
Scanner input = new Scanner(System.in);
String userinput = input.nextLine();
int randomInt = dice.nextInt(4);
if (userinput.equals("r")) {
if (randomInt == 1) {
System.out.println("gun 1");
} else if (randomInt == 2) {
System.out.println("gun 2");
} else if (randomInt == 3) {
System.out.println("gun 3");
} else if (randomInt == 4) {
System.out.println("gun 4");
} else if (randomInt == 5) {
System.out.println("gun 5");
}
}
}
}
答案 1 :(得分:0)
编辑 - 道歉,嗯!我没有注意到@ lal的评论,显然他确实首先注意到了这个错误,所以我的回答是他的一点点阐述。
当你这样做时:
if (userinput=="r")
您实际上是在比较对象的引用而不是实际对象。运算符==
比较对象引用,因此输出实际上是“false”
而不是“true.”
当然,这首先让人惊讶
要纠正这个问题,你应该尝试这样的equals方法:
if (userinput.equals("r"))
请注意equals()
java.lang.Object
的默认实现比较内存位置,只有当两个引用变量指向同一个内存位置时才返回true,即基本上它们是同一个对象。因此,要测试是否两个对象在等效意义上是相同的(包含相同的信息),您必须覆盖equals()
方法。(如果不覆盖equals()
方法,它将像{ {1}}。正如我在对象上使用==
运算符时所说,它只是检查引用是否是相同的对象。如果它们的成员包含相同的值,则不行。)
但是,您不需要覆盖,因为String类已经覆盖了它。