2014-02-13 94 views
0

我在这里有一个奇怪的问题。不知道是什么原因。我正在用Java编写一个演讲演示,并且正在编写几个简单的程序。出于某种原因,在使用摇滚纸剪刀程序时,并不总是要返回我的随机数。我的起始代码在下面,我想说,每3次中有一次,它会打印出一个数字。随机数不打印

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

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

编辑:整个项目的

主要 进口爪哇。 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; 
} 
} 
+0

它将在1-3之间打印否。问题是什么? – Kick

+3

它总是为我打印一个数字。为什么不呢?也许还有别的你在做什么,你没有在这里展示我们。 –

+0

我不知道它是否是我的笔记本电脑。但我已经在eclipse中运行了它,并将它导出并从命令提示符运行。它每3次我只会给我一次结果。 – Kristoff

回答

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(); 

,然后检查变量。

+0

谢谢!我知道这是一个简单的问题。我只是把它写成一个演讲的BS计划,并没有意识到这一点。 – Kristoff