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

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

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2017, 17:07   #1
armory
Пользователь
 
Аватар для armory
 
Регистрация: 06.10.2016
Сообщений: 37
По умолчанию [Java] Лотерея

Привет всем.

Накидал для практики консольную лотерейку, где надо угадать 6 чисел подряд, чтобы выиграть.
Просьба подсказать, есть ли здесь вариант как превратить этот код в нечто более привлекательное как с точки зрения синтаксиса, так и с точки зрения количества строк.

Сам вижу, что 6 раз делаю одни и те же действия, и их по законам ООП хорошо бы заключить в методы и вызывать для идентичных действий, да не соображу через какие области это можно реализовать.

Также просьба не писать точный код, это не способствует развитию мышления новичка.

Код:
import java.util.Random; //поддержка гсч
import java.util.Scanner; //поддержка ввода данных

public class Main {

    public static void main(String[] args)
    {
        //поддержка гсч
        Random random = new Random();
        int result = 0;
        int i1, i2, i3, i4, i5, i6;

        //гсч лото
        int n1 = 1+random.nextInt(10-1); //1-9
        int n2 = 10+random.nextInt(20-10); //10-19
        int n3 = 20+random.nextInt(30-20); //20-29
        int n4 = 30+random.nextInt(40-30); //30-39
        int n5 = 40+random.nextInt(50-40); //40-49
        int n6 = 50+random.nextInt(60-50); //50-59

        Scanner sc = new Scanner(System.in);

        //region [digit 1]
        System.out.print("Введите первое число от 1 до 9): ");

        while(!sc.hasNextInt())
        {
            System.out.println("Вы ввели не число.");
            System.out.print("Введите первое число от 1 до 9): ");
            sc.next();
        }

        i1 = sc.nextInt();
        while (i1<0 || i1>9)
        {
            System.out.println("Вы ввели неверное число.");
            System.out.print("Введите первое число от 1 до 9): ");
            i1 = sc.nextInt();
        }
        if (i1==n1) result++;
        //endregion

        //region [digit 2]
        System.out.print("Введите второе число от 10 до 19): ");

        while(!sc.hasNextInt())
        {
            System.out.println("Вы ввели не число.");
            System.out.print("Введите второе число от 10 до 19): ");
            sc.next();
        }

        i2 = sc.nextInt();
        while (i2<10 || i2>19)
        {
            System.out.println("Вы ввели неверное число.");
            System.out.print("Введите второе число от 10 до 19): ");
            i2 = sc.nextInt();
        }
        if (i2==n2) result++;

        //endregion

        //region [digit 3]
        System.out.print("Введите третье число от 20 до 29): ");

        while(!sc.hasNextInt())
        {
            System.out.println("Вы ввели не число.");
            System.out.print("Введите третье число от 20 до 29): ");
            sc.next();
        }

        i3 = sc.nextInt();
        while (i3<20 || i3>29)
        {
            System.out.println("Вы ввели неверное число.");
            System.out.print("Введите третье число от 20 до 29): ");
            i3 = sc.nextInt();
        }
        if (i3==n3) result++;

        //endregion

        //region [digit 4]
        System.out.print("Введите четвертое число от 30 до 39): ");

        while(!sc.hasNextInt())
        {
            System.out.println("Вы ввели не число.");
            System.out.print("Введите четвертое число от 30 до 39): ");
            sc.next();
        }

        i4 = sc.nextInt();
        while (i4<30 || i4>39)
        {
            System.out.println("Вы ввели неверное число.");
            System.out.print("Введите четвертое число от 30 до 39): ");
            i4 = sc.nextInt();
        }
        if (i4==n4) result++;

        //endregion

        //region [digit 5]
        System.out.print("Введите пятое число от 40 до 49): ");

        while(!sc.hasNextInt())
        {
            System.out.println("Вы ввели не число.");
            System.out.print("Введите пятое число от 40 до 49): ");
            sc.next();
        }

        i5 = sc.nextInt();
        while (i5<40 || i5>49)
        {
            System.out.println("Вы ввели неверное число.");
            System.out.print("Введите пятое число от 40 до 49): ");
            i5 = sc.nextInt();
        }
        if (i5==n5) result++;

        //endregion

        //region [digit 6]
        System.out.print("Введите шестое число от 50 до 59): ");

        while(!sc.hasNextInt())
        {
            System.out.println("Вы ввели не число.");
            System.out.print("Введите шестое число от 50 до 59): ");
            sc.next();
        }

        i6 = sc.nextInt();
        while (i6<50 || i6>59)
        {
            System.out.println("Вы ввели неверное число.");
            System.out.print("Введите шестое число от 50 до 59): ");
            i6 = sc.nextInt();
        }
        if (i6==n6) result++;

        //endregion

        //region [results]
        System.out.println("n1: " + n1);
        System.out.println("n2: " + n2);
        System.out.println("n3: " + n3);
        System.out.println("n4: " + n4);
        System.out.println("n5: " + n5);
        System.out.println("n6: " + n6);
        //endregion

        System.out.println("Чисел угадано: " + result);
        if (result==6) System.out.println("Поздравляем! Вы выиграли!");
    }
}
ЗЫ а чего код не сворачивается? теги spoil и spoiler не отрабатывают, есть другие варианты?

Спасибо.
Учусь кодить на C#/Java.
Не ищу готовых решений.
Всегда благодарен вам за помощь.
armory вне форума Ответить с цитированием
Старый 05.10.2017, 17:25   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от armory Посмотреть сообщение
6 раз делаю одни и те же действия, и их по законам ООП хорошо бы заключить в методы
причем тут ООП? Функции есть не только в ООП.
ООП это скорее про управление состоянием.
Цитата:
Сообщение от armory Посмотреть сообщение
не соображу через какие области это можно реализовать.
Области чего?
Для выделения функций можно для начала просто описать на более-менее высоком уровне что вам нужно сделать, и сразу станет понятнее какие можно сделать функции, параметры и т.п.

типа
Сгенерировать число от 10 до 19
Сгенерировать число от 20 до 29
...
Ввести 6 чисел
...

https://en.wikipedia.org/wiki/Top-do...ttom-up_design
Цитата:
Сообщение от armory Посмотреть сообщение
ЗЫ а чего код не сворачивается?
А зачем?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 05.10.2017 в 18:03.
Alex11223 вне форума Ответить с цитированием
Старый 05.10.2017, 18:13   #3
armory
Пользователь
 
Аватар для armory
 
Регистрация: 06.10.2016
Сообщений: 37
По умолчанию

Спасибо за ответы.

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Области чего?
Для выделения функций можно для начала просто описать на более-менее высоком уровне что вам нужно сделать, и сразу станет понятнее какие можно сделать функции, параметры и т.п.
Под "областями" я имел в виду как раз варианты выделения методов для обобщения операций.
А-ля, метод1(первое число), где метод1 проверяет ввели ли мы int в сканнере. Метод2(первое число) проверяет ввели ли мы число, которое попадает в диапазон гсч первого числа. Не очень идея?

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А зачем?
Да думал, чтоб народ не открывал первый пост, а там длиннющий код.

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
причем тут ООП? Функции есть не только в ООП.
ООП это скорее про управление состоянием.
Наверное, вы правы. Я подразумевал собрать всю конструкцию грамотно по методам.
Учусь кодить на C#/Java.
Не ищу готовых решений.
Всегда благодарен вам за помощь.
armory вне форума Ответить с цитированием
Старый 05.10.2017, 18:26   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Методу2 два числа нужны, диапазон же.
Ну и название нормальное

И до проверки ж ввести надо. Я бы что-то такое сделал:
Код:
int readNumber(int min, int max)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.10.2017, 18:31   #5
armory
Пользователь
 
Аватар для armory
 
Регистрация: 06.10.2016
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Методу2 два числа нужны, диапазон же.
Ну и название нормальное

И до проверки ж ввести надо. Я бы что-то такое сделал:
Код:
int readNumber(int min, int max)
Благодарю, подумаю на досуге.
Еще есть мыслишка сделать это как простенькую консольную игрушку, с количеством баллов за угаданные числа и Hi Scores.
Вряд ли это конечно зачтется в дальнейшем на собеседованиях, но вдруг людям важно, что человек доводил до конца, а не "изучал ЯП, но не доделал проект".
Учусь кодить на C#/Java.
Не ищу готовых решений.
Всегда благодарен вам за помощь.
armory вне форума Ответить с цитированием
Старый 05.10.2017, 18:48   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

Цитата:
Сообщение от armory Посмотреть сообщение
но вдруг людям важно, что человек доводил до конца, а не "изучал ЯП, но не доделал проект".
Это важно скорее не людям... это важно именно тебе... это очень хорошая сторона - доделывать все до кноца
ADSoft вне форума Ответить с цитированием
Старый 05.10.2017, 19:26   #7
armory
Пользователь
 
Аватар для armory
 
Регистрация: 06.10.2016
Сообщений: 37
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
Это важно скорее не людям... это важно именно тебе... это очень хорошая сторона - доделывать все до кноца
Согласен и понимаю, что это важное и полезное качество.
Но сами поймите, простенькие/плоские поделки никому крайне мало кому интересны. В резюме ищут противоречивый шаблон "выпускников с 6-летним стажем кодинга". Утрированно, но думаю вы понимаете к чему я клоню.
Учусь кодить на C#/Java.
Не ищу готовых решений.
Всегда благодарен вам за помощь.
armory вне форума Ответить с цитированием
Старый 05.10.2017, 19:42   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так делайте не плоские )
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 06.10.2017, 09:51   #9
armory
Пользователь
 
Аватар для armory
 
Регистрация: 06.10.2016
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Так делайте не плоские )
Об этом тоже думал.
Гуглил по ключевым словам "идеи для практики программирование", нашёл варианты с субд, мультитредингом, вебом (не моё), и что-то ещё было.

В продолжение темы
off: На C# я писал консольный "симулятор банкомата" с функциями депозита, вывода, проверки баланса (реализовал через меню и switch), но у меня произошёл ступор, когда я захотел прикрутить в него запоминание баланса. Я так и не понял через что и каким образом это реализовать. Скорее всего плохо гуглил.

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

Лично меня больше тянет на мобильные разработки и работу с СУБД, хорошо получается работа с мелочами. Но андроид студио не нравится, и я при изучении получил негативные впечатления при работе с кодом (просто не нравится как это всё выглядит внешне, напоминает Паскаль с его постоянными двоеточиями).

Какие-то такие мысли.
Спасибо вам за участие и что делитесь мнениями.
Учусь кодить на C#/Java.
Не ищу готовых решений.
Всегда благодарен вам за помощь.
armory вне форума Ответить с цитированием
Старый 06.10.2017, 12:28   #10
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Вот из личного опыта изучения явы:

Бесперебойник (UPS) есть ? По юсб к компу подключается? - сделайте монитор заряда на яве
...там сразу столько тем поизучать...чтук 5 и все разные, не связаные.
alexzk вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск