Случайные числа не распечатываются

У меня тут странная проблема. Не уверен, в чем причина. Я пишу на Java для демонстрации речи и пишу несколько простых программ. По какой-то причине он не всегда хочет возвращать мое случайное число при работе с программой «камень-ножницы-бумага». Мой начальный код приведен ниже, и я хочу сказать, что один из каждых 3 раз он фактически распечатает число.

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

Как я уже сказал, очень простой код, но я понятия не имею, почему он только иногда печатает числа...

Изменить: Весь проект

Основной импорт 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;
}
}

person Kristoff    schedule 13.02.2014    source источник
comment
он не будет печатать между 1-3. В чем проблема ??   -  person Kick    schedule 13.02.2014
comment
Он всегда печатает номер для меня. Почему бы и нет? Может быть, вы делаете что-то еще, что не показываете нам здесь.   -  person Martin Dinov    schedule 13.02.2014
comment
Я не знаю, мой ли это ноутбук или нет. Но я запустил его в eclipse, экспортировал и запустил из командной строки. Это дает мне результат только каждые 3 раза, когда я его вызываю.   -  person Kristoff    schedule 13.02.2014
comment
Можете ли вы опубликовать код метода main? Или весь код тестового класса?   -  person higuaro    schedule 13.02.2014
comment
@Kristoff сделайте одно: запустите этот код в бесконечном цикле и распечатайте значения. U найдет все возможные значения. Оно будет от 1 до 3.   -  person Kick    schedule 13.02.2014
comment
Я только что отредактировал вопрос с остальной частью кода. Да, я знаю, что получаю числа от 1 до 3. Это не проблема. Проблема в том, что он выводит результат только каждые 3 вызова метода. Мне нужно ввести rps 3 раза, чтобы получить результат.   -  person Kristoff    schedule 13.02.2014


Ответы (1)


Проблема в том, что каждый раз в вашем цикле вы вызываете 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();

а затем проверьте переменную.

person ajb    schedule 13.02.2014
comment
Благодарю вас! Я знал, что это простая проблема. Я просто пишу это как программу BS для выступления и не понял этого. - person Kristoff; 13.02.2014