Member 14009424 Ответов: 2

Компьютер Угадай мой номер игра проблема


В этой программе пользователь должен придумать число и позволить компьютеру угадать его.

Компьютер запросит у пользователя привязку,

Компьютер будет угадать число между связанными,

Пользователь будет вводить "выше" или "ниже", чтобы заставить компьютер угадать правильное число,

Если компьютер угадает правильный ответ, пользователь введет "да" и напечатает правильное утверждение.

Кодирование ниже-это то, над чем я работаю, однако я застрял в некоторых проблемах. Пожалуйста, помогите мне! Спасибо!

Проблемы, которые я нашел:
1. я не понимаю, как определить функцию randomInt внутри класса, но вне основной функции.

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

import java.util.*;

public class Guess 
{
	public static int randomInt(int min, int max)
	{
		return (int)((Math.random()*((max-min)+1))+min);
			}

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in); 
		
		//ask about the lower bound,
			TextIO.putln("Hey there! Welcom to the game!\n"
						+"I'm going to guess a number, and you have to pick it\n"
						+ "and you get to decide the bounds.\n" + 
						"What should the lower bound be?");
			int lowerlimit = in.nextInt();
				
				//if the user enter the number lower than 0,
				while(lowerlimit < 0) 
		        {
					TextIO.putln("ERROR Please enter a number that greater than 0");
					lowerlimit = in.nextInt();
					}
		
		//ask about the upper bound,
				TextIO.putln("Great! How about the upper bound?");
			int upperlimit = in.nextInt();
		
				//if the user enter the number lower than 0,
				while((upperlimit <= lowerlimit)) 
				{
					TextIO.putln("ERROR Please enter a number "
				 		+ "that greater than the lower bound.");
					upperlimit = in.nextInt();
					}

		//Print the range and instruction,	
				TextIO.putln("Ok. In the range between " + lowerlimit +
							" and "+upperlimit+":"+"\nPlease enter 'lower'/'higher' "
							+ "when the number I picked is not correct\n"
							+ "Enter 'yes' when I picked the right number"
							);
		
		//Generate the random number between the range,
		   
		    String feedback = "";
			
		    while (!feedback.equals("yes"))
	        {
		    		Random random = new Random();
	            int randNum = lowerlimit + random.nextInt(upperlimit - lowerlimit + 1);
	            			
	            System.out.println("I think it is " + randNum);
	            		feedback = in.next();

	            //When the computer need to pick a lower number,
	            		if (feedback.equals("lower"))
	            			upperlimit = randNum - 1;

	            // When the computer need to pick a higher number,
	            		else if (feedback.equals("upper"))
	            			lowerlimit = randNum + 1;
	        		}
		    
	        //When the user guesses the correct number,
	        		System.out.println("Yes! Correct!");
	        			in.close();
	    }
	
} // end of Guess class


Что я уже пробовал:

Я искал много примеров, которые похожи на мою программу, но я до сих пор не могу исправить это моя программа. Предположение компьютера все еще не имеет смысла.
Вот результат:
(предположим, что число, выбранное пользователем, равно 5)
Эй, там! Добро пожаловать в игру!
Я собираюсь угадать число, и вы должны выбрать его
и вы сами решаете границы.
Какой должна быть нижняя граница?
1
Отлично! Как насчет верхней границы?
10
Хорошо. В диапазоне от 1 до 10:
Пожалуйста, введите "ниже" / "выше", если число, которое я выбрал, неверно
Введите "да", когда я выбрал правильный номер
Я думаю, что это 9
ниже
Я думаю, что это 8
ниже
Я думаю, что это 6
ниже
Я думаю, что это 1
выше
Я думаю, что это 1<--дублируется
выше
Я думаю, что это 4
выше
Я думаю, что это 4
выше
Я думаю, что это 2< - не имеет смысла
да
- Да! Правильно!

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Я попробовал программу, но предположение компьютера странно. Компьютер не угадает число, основанное на моем руководстве.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
0

OriginalGriff

Цитата:
Я не понимаю, как определить функцию randomInt внутри класса, но вне основной функции.

А почему бы и нет? Вы это сделали!
public class Guess 
{
	public static int randomInt(int min, int max)
	{
		return (int)((Math.random()*((max-min)+1))+min);
			}

	public static void main(String[] args) {
Но сделайте себе одолжение и выберите стиль отступа, а затем придерживайтесь его. Мне все равно, какой это стиль: K&R, Whitesmiths, даже отвратительный 1TB: выберите его и придерживайтесь его. смешивая их и получая все это неправильно, вы не делаете свой код легким для чтения, и это приводит к ошибкам.
public class Guess 
    {
    public static int randomInt(int min, int max)
        {
        return (int)((Math.random()*((max-min)+1))+min);
        }
    public static void main(String[] args) 
        {
Гораздо более последовательный, гораздо более понятный для чтения (кстати, это называется "Белые кузнецы", но выберите тот, который нравится вам или вашему наставнику)

Цитата:
Я попробовал программу, но предположение компьютера странно. Компьютер не угадает число, основанное на моем руководстве.
"Это странно" не является отчетом об ошибке - как вы узнаете, когда вы начнете позволять другим использовать ваше программное обеспечение, это помогает узнать, как это "странно", когда это "странно", и если есть какие-либо сообщения, связанные с этим.

Почему вы объявили метод, чтобы дать вам случайное число в диапазоне, а затем проигнорировали его? И почему код, который вы используете, совсем не похож на него?

Почему вы вообще используете случайные числа для угадывания? Вот почему они такие странные!
Как бы вы это сделали в реальном мире?
- Я? Я бы предположил, что на полпути между верхним и нижним пределами: если диапазон равен 1:10, я бы предположил, что 5. Если это ниже, то это становится нижним пределом. если она выше, то это становится верхним пределом. и повторяю. Быстро и эффективно (это называется бинарной отбивной, посмотрите).

Кроме того, отладчик-ваш друг здесь.