Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 14
1

Оптимизация кода на Java

06.12.2018, 16:06. Просмотров 556. Ответов 4

Доброго времени суток, понимаю что данный код можно оптимизировать и по человечески переписать, но не имею представления как это сделать, так как нахожусь только на начальном этапе знакомства с JAVA, не могли бы Вы помочь\объяснить как это возможно сделать?

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import static  java.lang.Math.*;
 
public class Raschet {
    public static void main (String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        System.out.println("Выберите операцию: 1 - Кредит, 2 - Депозит");
        int num_oper = Integer.parseInt(br.readLine());
 
        switch (num_oper){
            case 1: num_oper = 1;
            {
                System.out.println("Выбранно кредитование.");
                System.out.println("Выберите тип кредита: 1- ануитетный, 2 - дифференцированные");
                int num_oper2 = Integer.parseInt(br.readLine());
                switch (num_oper2) {
 
                    case 1:
                        num_oper2 = 1;
                    {
                        System.out.println("Ануитетный");
 
                        System.out.println("Введите сумму кредита:");
                        int sum_kred = Integer.parseInt(br.readLine());
 
                        System.out.println("Введите процентную ставку:");
                        double procent = Integer.parseInt(br.readLine());
 
                        System.out.println("Введите количество месяцев:");
                        int month = Integer.parseInt(br.readLine());
 
                        double P = Math.round(sum_kred * (procent / 100 / 12 + ((procent / 100 / 12) / (Math.pow(1 + procent / 100 / 12, month) - 1))));
 
                        double pog_proc = Math.round(sum_kred * procent / 100 / 12);
                        double pog_tela_kr = Math.round(P - pog_proc);
                        double dolg_na_konec_month = sum_kred - pog_tela_kr;
 
                        System.out.format("| Месяцы | Ежемесячные выплаты | Погашение процентов | Погашение тела кредита | Долг на конец месяца |%n");
                        System.out.format("|%-8s|%-21s|%-21s|%-24s|%-22s|%n", 1, P, pog_proc, pog_tela_kr, dolg_na_konec_month);
                        for (int i = 1; i < month; i++) {
                            System.out.format("|%-8s|%-21s|%-21s|%-24s|%-22s|%n", i + 1, P, pog_proc = Math.round(dolg_na_konec_month * procent / 100 / 12), pog_tela_kr = P - pog_proc, dolg_na_konec_month -= pog_tela_kr);
                        }
                        break;
                    }
                    case 2:
                        num_oper2 = 2;
                    {
                        System.out.println("Дифференцированные");
                        System.out.println("Введите сумму кредита:");
                        int sum_kred1 = Integer.parseInt(br.readLine());
                        System.out.println("Введите процентную ставку:");
                        double procent = Integer.parseInt(br.readLine());
                        System.out.println("Введите количество месяцев:");
                        int month = Integer.parseInt(br.readLine());
 
                        double pog_tela_kr = (sum_kred1 / month);
                        double pog_proc = Math.round((sum_kred1 * procent) / (100 * month));
                        double dolg_na_konec_month = sum_kred1 - pog_tela_kr;
                        double P = pog_proc + pog_tela_kr;
 
                        System.out.format("| Месяцы | Погашение процентов | Ежемесячные выплаты | Погашение тела кредита | Долг на конец месяца |%n");
                        System.out.format("|%-8s|%-21s|%-21s|%-24s|%-22s|%n", 1, pog_proc, P , pog_tela_kr, dolg_na_konec_month);
                        for (int i = 1; i < month; i++) {
                                double pog_proc1;
                            System.out.format("|%-8s|%-21s|%-21s|%-24s|%-22s|%n", i + 1,pog_proc1 = Math.round(dolg_na_konec_month * procent / 100 / 12), P= pog_proc1+ pog_tela_kr, pog_tela_kr, dolg_na_konec_month -= pog_tela_kr);
                        }
                        break;
                    }
                }
                break;
            }
                             case 2: num_oper = 2;{
                        System.out.println("Накопительные вклад");
 
                        System.out.println("Введите сумму вклада:");
                        double sum_dep = Integer.parseInt(br.readLine());
                        System.out.println("Введите процентную ставку:");
                        double procent = Integer.parseInt(br.readLine());
                        System.out.println("Введите количество месяцев:");
                        int month = Integer.parseInt(br.readLine());
 
                        double procent2 = procent/100/12;
                        double sum_vkladu_za_month = sum_dep*procent2;
 
                        System.out.format("| Месяцы | Сумма вклада с капитализациец | Сумма процентов за месяц |%n");
                        System.out.format("|%-8s|%-31s|%-26s|%n", 1, sum_dep, Math.round(sum_vkladu_za_month));
                        for (int i = 1; i < month ; i++) {
 
                            System.out.format("|%-8s|%-31s|%-26s|%n", i+1, Math.round(sum_dep+=sum_vkladu_za_month),Math.round(sum_vkladu_za_month=(sum_dep+sum_vkladu_za_month)*procent2));
                        }
                    }
                    break;
                }
               
            }
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2018, 16:06
Ответы с готовыми решениями:

Посоветуйте примеры кода по Java. Теория прочтена, но с языком Java не знакома
Или может кто может дать готовый код. В теории вроде бы не очень сложно. :cry: 1.Напишите...

Оптимизация кода
задача : Группа людей участвует в марафоне, их имена и время за которое они пробежали марафон вы...

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

Оптимизация кода
во всем коде много раз повторяются такие вот строчки for(int i = 0; i &lt; 9; i++) for(int j =...

4
88 / 67 / 23
Регистрация: 07.11.2018
Сообщений: 485
06.12.2018, 17:59 2
Цитата Сообщение от Kvazar1917 Посмотреть сообщение
double procent = Integer.parseInt(br.readLine());
Цитата Сообщение от Kvazar1917 Посмотреть сообщение
double sum_dep = Integer.parseInt(br.readLine());
зачем делать дубль и пихать инт? лучше инт тогда делать или Double.vlaueOf и весь код расчитан на акуратного пользователя
InputMismatchException полюбому над ловить.
1
1457 / 1158 / 285
Регистрация: 17.02.2014
Сообщений: 6,243
07.12.2018, 12:34 3
Цитата Сообщение от Kvazar1917 Посмотреть сообщение
объяснить
сделать, например, все не в одном методе!"
0
47 / 22 / 8
Регистрация: 04.05.2013
Сообщений: 63
12.12.2018, 14:33 4
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import static  java.lang.Math.*;
 
public class Raschet {
 
    public final static String CHOOSE_OPERATION = "Выберите операцию: 1 - Кредит, 2 - Депозит.";
    public final static String CHOOSE_CREDIT_TYPE = "Выберите тип кредита: 1- ануитетный, 2 - дифференцированные";
 
    public static void main (String[] args) {
        new Raschet().run();
    }
 
    private BufferedReader console;
    private int numOper;
    private int numOper2;
 
    public void run() {
        try {
            console = new BufferedReader(new InputStreamReader(System.in));
        } catch (IOException e) {
            e.printStackTrace();
            System.exit(-1);
        }
        numOper = consoleInput(CHOOSE_OPERATION, Integer::parseInt);
 
        switch (numOper) {
            case 1: numOper = 1;
                System.out.println("Выбранно кредитование.");
                numOper2 = consoleInput(CHOOSE_CREDIT_TYPE, Integer::parseInt);
 
                switch (numOper2) {
                    case 1:
                        System.out.println("Ануитетный");
                        handleAnnuity();
                        break;
                    case 2:
                        System.out.println("Дифференцированные");
                        handleDiff();
                        break;
                }
                break;
            case 2:
                System.out.println("Накопительные вклад");
                handleDeposit();
                break;
        }
    }
 
    public void handleAnnuity() {
        int sumCredit = consoleInput("Введите сумму кредита:", Integer::parseInt);
        double procent = consoleInput("Введите процентную ставку:", Double::parseDouble);
        int month = consoleInput("Введите количество месяцев:", Integer::parseInt);
 
        double p = Math.round(sumCredit * (procent / 100 / 12 + ((procent / 100 / 12) / (Math.pow(1 + procent / 100 / 12, month) - 1))));
 
        double repaymentProcent = Math.round(sumCredit * procent / 100 / 12);
        double repaymentBody = Math.round(p - repaymentProcent);
        double debtOnMonthEnd = sumCredit - repaymentBody;
 
        System.out.format("| Месяцы | Ежемесячные выплаты | Погашение процентов | Погашение тела кредита | Долг на конец месяца |%n");
        System.out.format("|%-8s|%-21s|%-21s|%-24s|%-22s|%n", 1, p, repaymentProcent, repaymentBody, debtOnMonthEnd);
        for (int i = 1; i < month; i++)
            System.out.format("|%-8s|%-21s|%-21s|%-24s|%-22s|%n",
                i + 1,
                p,
                repaymentProcent = Math.round(debtOnMonthEnd * procent / 100 / 12),
                repaymentBody = p - repaymentProcent,
                debtOnMonthEnd -= repaymentBody);
    }
 
    public void handleDiff() {
        int sumCredit = consoleInput("Введите сумму кредита:", Integer::parseInt);
        double procent = consoleInput("Введите процентную ставку:", Double::parseDouble);
        int month = consoleInput("Введите количество месяцев:", Integer::parseInt);
 
        double repaymentBody = (sumCredit / month);
        double repaymentProcent = Math.round((sumCredit * procent) / (100 * month));
        double debtOnMonthEnd = sumCredit - repaymentBody;
        double p = repaymentProcent + repaymentBody;
 
        System.out.format("| Месяцы | Погашение процентов | Ежемесячные выплаты | Погашение тела кредита | Долг на конец месяца |%n");
        System.out.format("|%-8s|%-21s|%-21s|%-24s|%-22s|%n", 1, repaymentProcent, P , repaymentBody, debtOnMonthEnd);
        for (int i = 1; i < month; i++) {
            double pogProc1;
            System.out.format("|%-8s|%-21s|%-21s|%-24s|%-22s|%n",
                i + 1,
                pogProc1 = Math.round(debtOnMonthEnd * procent / 100 / 12),
                p = pogProc1 + repaymentBody,
                repaymentBody,
                debtOnMonthEnd -= repaymentBody);
        }
    }
 
    public void handleDeposit() {
        double sumDeposit = consoleInput("Введите сумму вклада:", Double::parseDouble); 
        double procent = consoleInput("Введите процентную ставку:", Double::parseDouble);
        int month = consoleInput("Введите количество месяцев:", Integer::parseInt);
 
        double procent2 = procent / 100 / 12;
        double procentForMonth = sumDeposit*procent2;
 
        System.out.format("| Месяцы | Сумма вклада с капитализациец | Сумма процентов за месяц |%n");
        System.out.format("|%-8s|%-31s|%-26s|%n", 1, sumDeposit, Math.round(procentForMonth));
        for (int i = 1; i < month ; i++)
            System.out.format("|%-8s|%-31s|%-26s|%n",
                    i+1,
                    Math.round(sumDeposit += procentForMonth),
                    Math.round(procentForMonth = (sumDeposit + procentForMonth)*procent2));
    }
 
    public <T> T consoleInput(String caption, Function<String, T> parser) {
        System.out.println(caption);
        return parse.apply(console.readLine());
    }
 
}
0
108 / 88 / 25
Регистрация: 02.06.2018
Сообщений: 257
12.12.2018, 14:47 5
Цитата Сообщение от Kvazar1917 Посмотреть сообщение
не имею представления как это сделать
Ну, например:
1) Называть классы и их члены не на русском языке, к примеру класс Raschet или
Java
1
double dolg_na_konec_month
- это ужасно. Всё должно быть только на английском, также почитайте про CamelCase
2) Обрабатывать исключения
3) Разбивать вашу программу на отдельные классы/методы, которые выполняют конкретные задачи. Т.е. не писать один класс или метод для "вообще всего"
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2018, 14:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Массивы, оптимизация кода
Int n = sc.nextInt(); Int mass=new int ; For (int i=1;i&lt; mass.length; i++){ mass =(i*2)-1;} ...

Перевод кода с Pascal на Java - Java SE
var a:Int64; begin Reset(Input,'input.txt'); Rewrite(Output,'output.txt'); read(a);...

Оптимизация кода для вывода категорий.
Здравствуйте. У меня есть таблица с категориями примерно с такой структурой. category...

Оптимизация кода поиска наибольшего и наименьшего числа
Ребята, Java изучаю по книжке. Хотелось бы увидеть решение от гуру, чтоб знать к чему стремиться....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.