2013-11-25 5 views
-1

Я пишу программу, которая генерирует случайное число, а затем пользователь угадывает номер. У меня есть два метода:Почему этот метод не выполняется?

public static void main(String[] args) 
{ 
//Declares methods to be used during process 
generateNumber(); 
playGame(); 
} 

Первый метод generateNumber() выполняет отлично. Код выглядит следующим образом:

public static void generateNumber() 
{ 
//Generates number and assigns it to the variable "randomNumber" 
System.out.println("Generating random number between 0 and 100. Please wait."); 
Random rand = new Random(); 
int randomNumber = rand.nextInt(101) + 1; 
System.out.println("Random number generated"); 
} 

Затем процесс заканчивается, и второй метод playGame():

public static void playGame() 
{ 
//Asks for guess of the number. Prints whether the guess is above or below randomNumber. 
Scanner reader = new Scanner(System.in); 
while(userGuess != randomNumber){ 
    System.out.println("Guess the number "); 
    userGuess = reader.nextInt(); 

    if (userGuess > randomNumber) { 
    numberOfGuesses++; 
    System.out.println("Incorrect! The number that you guessed is greater than my number!"); 
    } else { 
    numberOfGuesses++; 
    System.out.println("Incorrect! The number that you guessed is less than my number!"); 
     } 

if(userGuess == randomNumber){ 
System.out.println("Correct! My number was "+randomNumber+". It took you "+numberOfGuesses+" tries to find my number!"); 
    } 
} 
} 

форматирование может быть плохим, но я только что перевел ее из JCreator и все это было перепутано , Я уверен, что это что-то очень простое, но любая помощь приветствуется.

+0

ваш код не может скомпилировать – RamonBoza

+0

как его исправить? – user3033159

+1

Каково поведение? Какая ошибка? Нет ли ошибки, что вы ожидаете, и что вы наблюдали? – christopher

ответ

1

randomNumber является локальной переменной в generateNumber(), и вы пытаетесь получить к ней доступ в playGame().

Вы должны либо использовать глобальную переменную, или еще лучше дать случайное число в качестве параметра playGame()

public static int generateNumber() 
{ 
//Generates number and assigns it to the variable "randomNumber" 
System.out.println("Generating random number between 0 and 100. Please wait."); 
Random rand = new Random(); 
int randomNumber = rand.nextInt(101) + 1; 
System.out.println("Random number generated"); 
return randomNumber; 
} 

public static void playGame(int randomNumber) 
{ 
... 
} 

public static void main(String[] args) 
{ 
//Declares methods to be used during process 
int randomNumber = generateNumber(); 
playGame(randomNumber); 
} 

Update:

Проблема с печатью как «Правильно» и «Некорректное "лежит в структуре if заявлений

if (userGuess > randomNumber) { 
    // incorrect 
} else { 
    // incorrect 
} 

if (userGuess == randomNumber) { 
    // correct 
} 

Когда у вас есть guess == random, он войдет в else часть и во втором if. Чтобы решить эту проблему, вы должны объединить все if s вместе, поэтому программа выберет только одну из трех ветвей, например.

if (userGuess == randomNumber) { 
    // correct 
} else if (userGuess > randomNumber) { 
    // incorrect 
} else { 
    // incorrect 
} 
+0

да! это сработало! Спасибо! также, всякий раз, когда я запускаю программу, хотя я правильно отвечаю и печатает «Правильно!». line, он говорит «Неправильно!». линии до завершения процесса. любые идеи о том, как это исправить? – user3033159

+0

ах, я понимаю. Это имеет большой смысл. Спасибо огромное! – user3033159

1

Ваше случайное число объявляется одним способом, но на него ссылаются в другом.

int randomNumber = rand.nextInt(101) + 1; 

Вам необходимо объявить об этом в классе.

+0

так переместите это на главный метод? – user3033159

+0

@ user3033159 Нет, не внутри основного метода. Просто объявите переменную на уровне класса (вне любых методов) и просто установите значение в 'generateNumber()'. –

+0

public static int randomNumber ;? потому что я сделал это в верхней части программы, я просто не включил эту часть кода – user3033159

0

У вас, похоже, отсутствует объявление переменной userGuess.

EDIT: А также переменная randomNumber не объявлена ​​во втором методе. Вы должны объявить его в классе как статическую.

+0

userGuess = reader.nextInt(); – user3033159

+0

Это не декларация, это определение. Должно быть «int userGuess»; где-то –

+0

определено в верхней части программы. Я не показывал эту часть, извините. – user3033159

1

В дополнение к тому, что сказал Билл Ящерица, вы, кажется, не объявляете количество догадок нигде, и вы не объявляете userGuess. Вы должны объявить их обоим, возможно, в области возможностей.

Смежные вопросы