随机数不打印

时间:2014-02-13 17:59:32

标签: java random system.out

我在这里遇到一个奇怪的问题。不确定原因是什么。我正在用Java编写语音演示,我正在编写一些简单的程序。出于某种原因,在使用石头剪刀程序时,并不总是想要返回我的随机数。我的起始代码在下面,我想说每3次中有一次,它实际上会打印出一个数字。

Random rand = new Random();
int randomNum = rand.nextInt(3) + 1;
System.out.println(randomNum);

就像我说的那样,非常简单的代码,但我不知道为什么它有时会打印出数字......

编辑:整个项目

主 import java.util.Scanner;

public class Speech_Main {

public static void main(String[] args) {
        boolean running = true;
        Scanner in = new Scanner(System.in);


        while(running){
            if(in.next().equalsIgnoreCase("exit")){
                running = false;
            }
            if(in.next().equalsIgnoreCase("Hello_World")){
                Hello_World.start();
            }
            if(in.next().equalsIgnoreCase("rps")){
                Rock_Paper_Scissors.start();
            }
        }
        in.close();
        return;
}

}

RPS

import java.util.Random;


public class Rock_Paper_Scissors {
public static void start(){
    System.out.println(random());
}
private static int random(){

    Random rand = new Random();
    int randomNum = rand.nextInt() + 1;
    return randomNum;
}
}

1 个答案:

答案 0 :(得分:5)

问题在于,每次循环时,都会调用in.next()三次:

    while(running){
        if(in.next().equalsIgnoreCase("exit")){
            running = false;
        }
        if(in.next().equalsIgnoreCase("Hello_World")){
            Hello_World.start();
        }
        if(in.next().equalsIgnoreCase("rps")){
            Rock_Paper_Scissors.start();
        }
    }

当您到达第一个if时,您拨打in.next(),它会从扫描仪获取下一个令牌。问题是当你到达第二个if时,它会再次调用in.next() ,然后会尝试获取另一个令牌。它没有使用前一个,因为你告诉它要换一个新的。要解决此问题,请在循环开头声明一个变量以保存in.next()

String input = in.next();

然后检查变量。