Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61

Танцы с бубном или точнее с if

14.02.2016, 20:53. Показов 2242. Ответов 32

Студворк — интернет-сервис помощи студентам
В общем я опять с if заморачиваюсь. Все вроде работает, кроме нажатия клавиши "d", не возвращается к началу программы. Если вставить рекурсив (main(args)), то можно вернуться и продолжить, но тогда выход не работает из программы. Что же нужно добавить, чтобы все работало? Напишите пожалуйста.
Вот код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Scanner;
 
/**
 * Created by Атом on 14.02.2016.
 */
public class Main3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Угадайте число от 1 до 3");
        for (; ; ) {
 
            int num = scanner.nextInt();
            int n = (int) (Math.random() * 3);
            if (num == n) {
                System.out.println("Правильно! Вы угадали число:" + n);
                System.out.println("Вы хотите продолжить?\nДа введите: d\nНет введите n:");
                String chars = scanner.nextLine();
                while (!chars.equals("d") && !chars.equals("n")) {// Проверка
                   chars = scanner.nextLine();
                }
                if ("d".equals(chars)) {
                    System.out.println();
//                    main(args); - если включить рекурсив, тогда выход не работает
                }
                else if ("n".equals(chars)) {
                    System.out.println("До свиданья");
                    break;
                }
            }
            else System.out.println("Увы, вы не угадали, коьпьютер загадал число:"+n+".\n Попробуйте еще раз");
 
        }
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.02.2016, 20:53
Ответы с готовыми решениями:

Удаленный рабочий стол или танцы с бубном!
Вобщем такая ситуация! Дома имеется 2 компа один монитор и ноутбук. Все это соединено через роутер Netgear wgr612 (ноут через wifi). Один...

чем грузится память или танцы с бубном часть вторая.
Всем здрасьте, это снова я! вообщем я тут провел профилактику памяти, решил отмониторить загрузку (раньше все время была загрузка больше...

Танцы с бубном
Сегодя часа два назад меня просто убили следующей новостью: У нас утреннем развозе проставились не закупочные цены вместо продажных....

32
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
14.02.2016, 21:53
Atom77, стесняюсь спросить: а к началу программы - это куда? К строке "Угадайте число..."? (Да, к слову пришлось у Вас ещё и ноль частенько выскакивает, так что либо строку поменяйте, либо от нуля избавьтесь.)
Если заморочка только в этом, то сделайте так:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Main3 {
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        for (;;) {
            System.out.println("Угадайте число от 1 до 3");
            int num = scanner.nextInt();
            int n = (int) (Math.random() * 3);
            if (num == n) {
                System.out.println("Правильно! Вы угадали число:" + n);
                System.out.println("Вы хотите продолжить?\nДа введите: d\nНет введите n:");
                String chars = scanner.nextLine();
                while (!chars.equals("d") && !chars.equals("n")) {// Проверка
                    chars = scanner.nextLine();
                }
                if ("d".equals(chars)) {
                    System.out.println();
//                    main(args); - если включить рекурсив, тогда выход не работает
                } else if ("n".equals(chars)) {
                    System.out.println("До свиданья");
                    break;
                }
            } else {
                System.out.println("Увы, вы не угадали, коьпьютер загадал число:" + n + ".\n Попробуйте еще раз");
            }
        }
    }
}

А вообще уже наверное Вам пора с карандашиком начинать программы писать: продумать структуру, какой блок кода что делает и реализовать их отдельными методами... А то так и будут "танцы с бубном"...
0
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586
14.02.2016, 21:56
зачем для сравнения equals применять???
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
14.02.2016, 22:04  [ТС]
Левиафам, a чем вы предлагаете сравнивать если не equals ?
0
 Аватар для Lumber
345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
14.02.2016, 22:10
По сути запустить заново означает вывести строку "Угадайте число от 1 до 3" и продолжить цикл.

поэтому самое короткое исправление получается такое:

JSON
1
2
3
4
5
if ("d".equals(chars)) {
    System.out.println();
    System.out.println("Угадайте число от 1 до 3");
    break;
}
но правильнее изменить структуру программы.
0
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586
14.02.2016, 22:12
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Scanner;
 
public class Forum {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String chars = scanner.nextLine();
 
        if ("d"==chars.intern()) {
            System.out.println("вы ввели d");
        }
    }
 
}
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
14.02.2016, 22:17  [ТС]
Левиафам, но вы же тоже используете equals. И я хотел заметить, что в проверке вроде нет сравнения. И еще очень было бы нам всем посмотреть именно вашу структуру программы.
0
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586
14.02.2016, 22:21
можно еще и с "continue;" поизвращаться

Добавлено через 3 минуты
да где я использую иквалз? Вот статья интересная, там рассказано про то что я использую http://habrahabr.ru/post/79913/

Добавлено через 19 секунд
да где я использую иквалз? Вот статья интересная, там рассказано про то что я использую http://habrahabr.ru/post/79913/
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
14.02.2016, 22:29  [ТС]
Я извиняюсь не Левиафам использовал equals, а Lumber. Ну так, что Левиафам покажите правильную структуру этого малюсенького кода.
0
32 / 32 / 22
Регистрация: 29.10.2015
Сообщений: 195
14.02.2016, 22:42
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.Scanner;
 
public class CyberForum {
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean end = false;
 
        do {
            System.out.println("Угадайте число от 1 до 3");
            int n = (int) (Math.random() * 3);
            int num = scanner.nextInt();
            if(num == n) {
                System.out.println("Правильно! Вы угадали число: " + n);
            } else {
                System.out.println("Увы, вы не угадали, компьютер загадал число: " + n + "\nПопробуйте ещё раз");
            }
            System.out.println("Вы хотите продолжить?\nДа введите: d\nНет введите n: ");
            String chars = scanner.next();
            if(chars.equals("n")) {
                end = true;
                System.out.println("Досвиданья");
            }
        } while (!end);
    }
}
Добавлено через 33 секунды
Проверил, работает
0
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586
14.02.2016, 22:47
Завтра покажу,если будет интересно, я спать просто собираюсь!
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
14.02.2016, 22:50  [ТС]
liptonus777, а ваш вариант не правильно работает. Если вместо буквы "d" нажать единичку или другой символ, то программа все равно переходит к началу, проверьте если не верите. Вот и ответ, Левиафаму за чем использовался в проверке equals.

Добавлено через 1 минуту
Хорошо, мне будет очень интересно, спокойной ночи Левиафам.
0
32 / 32 / 22
Регистрация: 29.10.2015
Сообщений: 195
14.02.2016, 22:54
Atom77, А что должно происходить если нажимается не D или N?
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
14.02.2016, 22:58  [ТС]
Ничего, ведь прога должна ждать только правильного ввода символа "d". Поэтому я и использовал проверку ввода только "d" и "n". Но ваш вариант в прицепе рабочий если добавить эту проверку. Ну да ладно. Подскажите лучше как от нуля избавиться, а то в условие сказано, угадайте число от 1-3.
0
32 / 32 / 22
Регистрация: 29.10.2015
Сообщений: 195
14.02.2016, 23:02
Atom77, Сейчас сделаю. Чтобы избавиться от нуля нужно добавить к результату рандома +1, ну и максимальное число изменить на 2
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
14.02.2016, 23:05  [ТС]
liptonus777, очень интересно. А я думал через if(n!=0){...} сделать. Буду ждать.
0
32 / 32 / 22
Регистрация: 29.10.2015
Сообщений: 195
14.02.2016, 23:10
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Scanner;
 
public class CyberForum {
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean end = false;
 
        do {
            System.out.println("Угадайте число от 1 до 3");
            int n = (int) (Math.random() * 3) + 1 ;
            int num = scanner.nextInt();
            if(num == n) {
                System.out.println("Правильно! Вы угадали число: " + n);
            } else {
                System.out.println("Увы, вы не угадали, компьютер загадал число: " + n + "\nПопробуйте ещё раз");
            }
            String chars;
            do {
                System.out.println("Вы хотите продолжить?\nДа введите: d\nНет введите n: ");
                chars = scanner.next();
            }while(!(chars.equals("n") || chars.equals("d")));
            if(chars.equals("n")) {
                end = true;
                System.out.println("Досвиданья");
            }
        } while (!end);
    }
}
Добавлено через 25 секунд
Про максимальное число спутал немного, ничего изменять не нужно. Просто 1 добавить
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
14.02.2016, 23:15  [ТС]
liptonus777, представляете только написал int n = (int) (Math.random() * 2) + 1 ; и тут вы уже ответ такой же дали. Прям легче стало, значит я не такой тупой, как мне часто кажется.
0
32 / 32 / 22
Регистрация: 29.10.2015
Сообщений: 195
14.02.2016, 23:17
Atom77, Это хорошо
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
14.02.2016, 23:20  [ТС]
liptonus777, а вот еще вопрос, вот прога немного не так работает у вас, как в вечном массиве. У вас после ввода цифры сразу спрашивает, будете продолжать или нет? А в вечном массиве, пока человек не угадает, прога выбор не делает. Вот в вашем варианте так можно сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2016, 23:20
Помогаю со студенческими работами здесь

Надоели танцы с бубном
Всем доброго времени суток. Суть проблемы: имеется локальная сеть из 16 компов,1 выступает в роли сервера и через него остальные выходят в...

Почтовая БД - танцы с бубном
Странное дело начало происходить с моей почтовой БД. В один день пропали все входящие из папки "Инбокс". Фиксап, сжатие не...

Curl и парсинг, танцы с бубном
Доброго вечера, форумчане. Для себя и, возможно, друзей-знакомых, решил написать простенький проектик. Суть в том, чтобы с часто...

EFI на ноутбуке и танцы с бубном
Добрый день, появилась необходимость переустановить ОС на ноутбуке, который использует EFI. В силу того, что единственный флеш-накопитель...

Танцы с бубном вокруг озу
Есть мат. плата - P8H61-V Есть две планки Crucial BLS4G3D13390S1S00 Ballistix по 8Gb Вставляю планку №1 в слот №1 - биос видит 8 гиг ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru