java嵌套for循环不工作...请帮忙

时间:2013-08-27 01:56:51

标签: java if-statement for-loop random

我对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(" ");
    }

}
}

2 个答案:

答案 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类已经覆盖了它。