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

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

14.02.2016, 20:53. Показов 2246. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru