Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
30 / 0 / 0
Регистрация: 27.02.2017
Сообщений: 10

Как рационально подойти к сокращению и упрощению кода?

08.03.2017, 17:07. Показов 1304. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Прошу подсказать новичку как рационально подойти к сокращению и упрощению (приведение к компактности) в данном ниже коде? Вообще возможно ли это здесь? Быть может, я и так сделал всего по минимуму. Однако, шансы, как мне кажется, на это крайне малы.

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

Если у кого глаза не вытекут от сего творения, то вот суть программы:
"Определение ближайшей сравнительной величины до ориентировочной." Запрос на ввод пользователем ориентира и величин, которые нужно сравнить. Затем, определить ближайшую из них до ориентира.

Хотелось бы научиться рационально реализовывать подобные простейшие программы. Пока получается только этот ужас бездны.


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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package mypackage;
 
import java.util.Scanner;
 
public class Main
{
    public static void main(String[] args) {
        System.out.println("Определение ближайшей сравнительной величины до ориентировочной.");
        System.out.println("Можно использовать только вещественные знакопеременные числа.");
        System.out.print("Ориентировочная величина: ");
        Scanner oriental = new Scanner(System.in);
        if (oriental.hasNextInt())
        {
            final int orientalint = oriental.nextInt();
 
            System.out.print("Величина для переменной a: ");
            Scanner entereda = new Scanner(System.in);
            if (entereda.hasNextInt())
            {
                int a = entereda.nextInt();
                int resulta = Math.abs(a - orientalint);
 
                System.out.print("Величина для переменной b: ");
                Scanner enteredb = new Scanner(System.in);
                if (enteredb.hasNextInt())
                {
                    int b = enteredb.nextInt();
                    int resultb = Math.abs(b - orientalint);
 
                    System.out.print("Величина для переменной c: ");
                    Scanner enteredc = new Scanner(System.in);
                    if (enteredc.hasNextInt())
                    {
                        int c = enteredc.nextInt();
                        int resultc = Math.abs(c - orientalint);
 
                        System.out.print("Величина для переменной d: ");
                        Scanner enteredd = new Scanner(System.in);
                        if (enteredd.hasNextInt())
                        {
                            int d = enteredd.nextInt();
                            int resultd = Math.abs(d - orientalint);
 
                            int resultab = Math.min(resulta, resultb);
                            int resultcd = Math.min(resultc, resultd);
                            int resultabcd = Math.min(resultab, resultcd);
 
                            if (resultab == resulta && resultabcd == resultab)
                                System.out.println("Ближайшее значение к ориентировочному ("+orientalint+") в переменной a: "+a);
                            else if (resultab == resultb && resultabcd == resultab)
                                System.out.println("Ближайшее значение к ориентировочному ("+orientalint+") в переменной b: "+b);
                            else if (resultab == resultc && resultabcd == resultcd)
                                if (resultcd == resultc)
                                    System.out.println("Ближайшее значение к ориентировочному ("+orientalint+") в переменной c: "+c);
                            else
                                System.out.println("Ближайшее значение к ориентировочному ("+orientalint+") в переменной d: "+d);
                            else
                                System.out.println("Два или более значений равноудалены от ориентировочного.");
                        }
                    }
                }
            }
        }
        else
        {
            System.out.println("ОШИБКА! Введенные данные не являются вещественным числом!");
        }
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.03.2017, 17:07
Ответы с готовыми решениями:

Советы по сокращению кода
Я только начал изучать c++ скажите пожалуйста, есть ли в коде лишние движения? Функция кода нахождение корней дискриминанта. Можно ли...

Как подойти к созданию дизайна и разметки до написания кода ?
Собственно, какие этапы предшествуют ?

Советы по упрощению кода. Количество слов в строке
Доброго времени суток! Подскажите, пожалуйста, пути упрощения сией простой программки на подсчет слов в строке #include...

6
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.03.2017, 17:24
сканнеров слишком мало, нужно добавить больше.
а теперь измени этот код так, чтобы пользователь вводил 50 величин.
1
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
08.03.2017, 17:40
Цитата Сообщение от xoraxax Посмотреть сообщение
сканнеров слишком мало, нужно добавить больше.

Не по теме:

Пора заводить свои плашки, по аналоги с лурком =)

2
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
09.03.2017, 01:21

Не по теме:

Цитата Сообщение от korvin_ Посмотреть сообщение
Пора заводить свои плашки, по аналоги с лурком =)
И тут все заверте....



Добавлено через 1 минуту
По теме считывайте все одним сканером, зачем на каждый ввод вы создаете новый экземпляр? Если все можно сделать одним?
2
30 / 0 / 0
Регистрация: 27.02.2017
Сообщений: 10
10.03.2017, 14:43  [ТС]
ntlinuxnt, спасибо за единственный разумный ответ. Вопрос в том, как считывать сразу все одним?
Могли бы простой пример привести с 2мя-3мя запросами, пожалуйста?

del
 Комментарий модератора 
Общение в таком ключе - верная дорога в бан.
0
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
10.03.2017, 15:04
Лучший ответ Сообщение было отмечено timdeygun как решение

Решение

Цитата Сообщение от timdeygun Посмотреть сообщение
с 2мя-3мя запросами, пожалуйста?
Не вводится имя в консоль второй раз
Недавно помогал человеку, у него в коде вы увидите как применить один сканер несколько раз.
1
30 / 0 / 0
Регистрация: 27.02.2017
Сообщений: 10
10.03.2017, 15:40  [ТС]
ntlinuxnt, Благодарю Вас за помощь. Разобрался, понял )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.03.2017, 15:40
Помогаю со студенческими работами здесь

Как рационально применять if
когда идет несколько условий подряд зависимых от первого условия (если первое исполнится другие не должны выполняться) каком случае меньше...

Как рационально обрабатывать большие V mp3?
Здравствуйте. Делаю музыкальный сайт, и как вы понимаете он не возможен без музыки. Подскажите как можно быстро обработать и...

Как использовать оперативную память рационально?
Здравствуйте. Есть код программы, где я сравниваю 2 текстовых файла, и если n-строка в первом не находит идентичную во втором, то она...

Как подойти к решению задачи
Кода и готового решения не прошу!!! Есть задачка грубо говоря звучит так: есть аудитория в которой сидят 30 человек, 1 за одной...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
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, то после закрытия окошка. . .
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
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru