Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2016, 11:40   #1
OlyaNik
 
Регистрация: 16.12.2016
Сообщений: 4
По умолчанию [Java] Нужна помощь в решении задачи на отгадывание числа

Помогите пожалуйста решить задачу на Java. Компьютеру нужно отгадать число, мной загаданное, методом деления интервала на пополам. Компьютер спрашивает у меня "Ваше число больше(или меньше) (то число, которое было серединой интервала)?", я могу отвечать только да или нет. Когда в конце остается два числа, например 7 и 8, я загадала 8, компьютер спрашивает "Ваше число 7?", я пишу нет, компьютер соответственно отвечает, что мое число это 8. Числа начала и конца интервала задается пользователем.

Последний раз редактировалось Вадим Мошев; 16.12.2016 в 23:41.
OlyaNik вне форума Ответить с цитированием
Старый 16.12.2016, 11:57   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Наработки какие-нибудь есть?
Если нет, тогда блиц-опрос:
1) как в Java вывести надпись: "Ваше число больше?"
2) как принять от пользователя ответ и где его сохранить? речь идёт о данных "да" и цифре "7".
3) как, по ответу пользователя "да", сделать "if"?
4) как в Java делается генератор случайных чисел?
______________
5) кстате, а если компьютер выберет именно середину интервала? например: 3,4,5,6,7 компьютер делает предположение 5?
ura_111 вне форума Ответить с цитированием
Старый 16.12.2016, 16:13   #3
OlyaNik
 
Регистрация: 16.12.2016
Сообщений: 4
По умолчанию

Наработок нет
1. System.out.println("Ваше число больше");
2. ответ принимаем считыванием то, что ввел пользователь
Scanner sc = new Scanner(System.in);
считываем и сохраняем, я так понимаю, в переменной
String command = sc.nextLine();
число тоже хранится в какой-то переменной типа int
3. знаю, что при проверке можно ли с потока ввода считать число, делаем такой if: if(sc.hasNextInt()), со строками, увы, не делала такое(
4. Random r = new Random();
int ranNumber = 0;
ranNumber = r.nextInt(10);
5. об этом я почему то не подумала, но думаю, что да, компьютер тоже должен спрашивать и про то число, что является серединой интервала
OlyaNik вне форума Ответить с цитированием
Старый 16.12.2016, 16:40   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ладно, посмотрю.
ura_111 вне форума Ответить с цитированием
Старый 16.12.2016, 19:15   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вроде набрасал:

Код:
import java.util.Scanner;
import java.util.Random;
public class igra {
    public static void main(String[] args){
        int a,b;
        int x;
        String command;
        Scanner sc = new Scanner(System.in);

  //      System.out.print("Введите начало интервала: ");
 //       a=sc.nextInt();
  //      System.out.print("Введите конец интервала: ");
  //      b=sc.nextInt();
  //      System.out.println("");

        Boolean ranNumber;
        Random r = new Random();

        a=1;
        b=11;
        while(true) {

            System.out.println("a= " + a);
            System.out.println("b= " + b);

            if(((a-b)==1)||((a-b)==-1)||((a-b)==0)) {
                break;
            }
            ranNumber = r.nextBoolean(); // FALSE - влево, TRUE - вправо
            if((a + b)% 2!=0) {
                if(ranNumber==Boolean.FALSE) {
                    System.out.println("Ваше число меньше или равно " + (a + b - 1) / 2);
                    command = sc.nextLine();
                    switch (command) {
                        case "да": {
                            a = a;
                            b = (a + b - 1) / 2;
                            break;
                        }
                        case "нет": {
                            a = (a + b + 1) / 2;
                            b = b;
                            break;
                        }
                        default: {
                            a = a;
                            b = b;
                            break;
                        }
                    }
                }
                if(ranNumber==Boolean.TRUE) {
                    System.out.println("Ваше число больше или равно " + (a + b + 1) / 2);
                    command = sc.nextLine();
                    switch (command) {
                        case "да": {
                            a = (a + b + 1) / 2;
                            b = b;
                            break;
                        }
                        case "нет": {
                            a = a;
                            b = (a + b - 1) / 2;
                            break;
                        }
                        default: {
                            a = a;
                            b = b;
                            break;
                        }
                    }
                }
            }
            else {
                if(ranNumber==Boolean.FALSE) {
                    System.out.println("Ваше число меньше " + (a + b) / 2);
                    command = sc.nextLine();
                    switch (command) {
                        case "да": {
                            a = a;
                            b = (a + b - 1) / 2;
                            break;
                        }
                        case "нет": {
                            a = (a + b) / 2;
                            b = b;
                            break;
                        }
                        default: {
                            a = a;
                            b = b;
                            break;
                        }
                    }
                }
                if(ranNumber==Boolean.TRUE) {
                    System.out.println("Ваше число больше или равно " + (a + b) / 2);
                    command = sc.nextLine();
                    switch (command) {
                        case "да": {
                            a = (a + b) / 2;
                            b = b;
                            break;
                        }
                        case "нет": {
                            a = a;
                            b = (a + b - 1) / 2;
                            break;
                        }
                        default: {
                            a = a;
                            b = b;
                            break;
                        }
                    }
                }
            }
        }
        if((a + b)% 2!=0) {
            System.out.println("Вы загадали " + a + " ?");
            command = sc.nextLine();
            if(command.equals("да")) {
                System.out.println("Ответ " + a);
            }
            else {
                System.out.println("Ответ " + b);
            }
        }
        else{
            System.out.println("Ответ " + b);
        }
    }
}
11.jpg



Протестируй программу при разных значения интервала (и когда четное количество улаживается в интервал и когда нечётное, и когда оба конца лежат в положительных числах и когда один из концов - отрицателен, и проверь все-все комбинации выбора пользователя)... Иногда тестирования программы занимает столько времени как и написание её кода... Во время тестирования обращай внимание на меняющийся интервал (он выводится на экран). Интервал задаётся переменными "а" и "b"...
Потом расскажи что у тебя получилось (если что - ошибки поправлю).

Последний раз редактировалось ura_111; 16.12.2016 в 19:19.
ura_111 вне форума Ответить с цитированием
Старый 16.12.2016, 19:23   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

И еще одно, обращай внимание когда программа спрашивает:
Код:
больше (меньше) и равно
и когда спрашивает просто:
Код:
больше (меньше)
ura_111 вне форума Ответить с цитированием
Старый 16.12.2016, 20:37   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Небольшие помарки:

11.jpg
ura_111 вне форума Ответить с цитированием
Старый 17.12.2016, 17:19   #8
OlyaNik
 
Регистрация: 16.12.2016
Сообщений: 4
По умолчанию

спасибо огромное, все работает =)
OlyaNik вне форума Ответить с цитированием
Старый 17.12.2016, 19:03   #9
OlyaNik
 
Регистрация: 16.12.2016
Сообщений: 4
По умолчанию

Можно еще вопрос? Для чего мы в коде рандом используем?) Если я его уберу, сильно что-то поменяется?

Последний раз редактировалось OlyaNik; 17.12.2016 в 19:10.
OlyaNik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь в решении задачи MarcusAurelius Помощь студентам 10 14.09.2015 19:47
даны два числа A и B.проверить являются ли числа A и B нечётными ( Делфи 7 нужна помощь в решении задач) nadyaH Помощь студентам 7 24.10.2013 17:51
Нужна помощь в решении задачи HeaD90 Помощь студентам 0 02.05.2009 18:47
нужна помощь в решении задачи! Elusive Devil Помощь студентам 2 22.03.2009 16:17