2014-02-13 98 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