Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Itachi261092
Веб-Разработчик
79 / 79 / 9
Регистрация: 23.01.2012
Сообщений: 696
1

Упрощение и оптимизация кода простой программы

02.06.2013, 21:43. Просмотров 816. Ответов 0
Метки нет (Все метки)

Здравствуйте форумчане. Недавно мне пришлось столкнуться с замечательным языком Java, получилось так, что времени на изучение основ и мануалов у меня нет, и время очень сильно поджимает. накалякал пока пару программ на скорую руку "лижь бы работало и компилировалось без ошибок" а то что правильно ли это написано с точки зрения самого языка - мне не известно, увы. Обращаюсь к опытным людям с целью более комфортного освоения данного языка. Помогите пожалуйста понять как правильно нужно работать с Java чтобы в коде не было непонятных моментов. Сюда выкладываю 2 программы написанных "за вечер", и прошу гуру посмотреть на явные и не явные косяки в коде и исправить абсурдные куски (уверен такие найдутся).

Первая программа писалась по заданию:
Указания: При написании программ использовать операторы арифметических присваиваний.
Счастливым будет считаться такое число из шести цифр, в котором сумма левых трех цифр равна сумме правых трех цифр, например, 457961: 4+5+7=9+6+1 = 16. Найти все счастливые числа в интервале от 100000 до 999999 и подсчитать их количество.

код не весь мой. помогали на форуме. тут много комментариев и думаю каждый сразу разберётся что я хотел сделать
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
package myfirstjava;
public class MyFirstJavaProgram {
    public static boolean intToArr(int in) throws IllegalArgumentException {//функция обработки массива
        if (in<=0) throw new IllegalArgumentException(); //обработка входного значения (типа int)
        int size = (int)Math.log10(in)+1; // расчёт размера массива
        int[] res = new int[size]; // объявление массива для занесения результата
        int curPos = 0, x, y; //вспомогательные переменные
        boolean flag=false; //флаг для проверки массива
        do //преобразование числа типа int в массив с именем res[]
        {
            res[curPos] = in%10;
            in /= 10;
        }
        while(++curPos<size); // уловие выхода из цикла преобразования массива
        x=res[0]+res[1]+res[2]; // икс равен сумме первых 3 значений массива
        y=res[3]+res[4]+res[5]; // игрек равен сумме 4-6 значений массива
        if (x==y) flag=true; //проверка на равенство левой и правой части
        return flag; // функция расчёта возвращает флаг ИСТИНА если левая часть массива (первые 3 значения) равна правой части (последующие 3 значения)
        
    }
    public static void main(String[] args) { //главная программа
        int min=100000, max=900000, number=0; //объявляем минимальную и максимальную границу и счётчик
        for (int i=min; i<max; i++){ //в цикле наращиваем используемое значение
            if (intToArr(i)==true){ //и передаём каждое на обработку функции intTosArr для обработки массива
                    number++; //если функция вернёт true то наше число является счастливым и мы увеличиваем счётчик на 1
                    System.out.println("№"+number+":"+i); //печать числа соответствующего правилу
            } //конец условия if
        } //конец цикла for
        System.out.println("Колличество счастливых билетов:"+number); //печать значения счётчика
    } //конец программы
}
Вторая написана только что. Задание:
Указания: При написании программ массивы чисел, которые заданы, определять через константы.
Задана последовательность, состоящая из 20 целых чисел. Определить М – наибольшее и m – наименьшее из этих чисел.Получить в порядке возрастания все числа данной последовательности из интервала(m, (m+М)/2).

тут я писал почти всё сам. стырил только код для сортировки массива где то в инете и прикрутил его в качестве процедуры:
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
package javaapplication1;
public class JavaApplication1 {
    public static int[] sortArr (int[] inArr){//сортировка массива
        int Arr[]=inArr;
        for (int i = 0; i < Arr.length; i++) {
        int min = Arr[i]; // Предполагаемый минимальный элемент
        int imin = i; // Индекс минимального элемента
            for (int j = i+1; j < Arr.length; j++) {
                if (Arr[j] < min) { //поиск и проверка минимального элемента
                    min = Arr[j];
                    imin = j;
                }
            }
            if (i != imin) { //сортировка относительно минимального элемента
                int temp = Arr[i];
                Arr[i] = Arr[imin];
                Arr[imin] = temp;
            }
        }
        return Arr; //возвращает отсортированный массив
    }
    public static void enterArr (int[] inArr, boolean flag){//печать массива
        int max=Integer.MIN_VALUE,min=Integer.MAX_VALUE;
        for (int i=0; i<inArr.length; i++){
            if (i==(inArr.length-1)){
                System.out.println(inArr[i]+"."); //в конце массива печатаем точку
            }
            else{
                System.out.print(inArr[i]+",");
            }
            if (inArr[i]<min){ //находим минимальный элемент массива
                min=inArr[i];
            }
            if (inArr[i]>max){ //тут максимальный
                max=inArr[i];
            }
        }
        if (flag==true){ //если при вызове процедуры второй параметр true то
            System.out.println("min="+min+", max="+max); //печатаем минимальное и максимальное
        }
    }
    public static void main(String[] args){
        int max=Integer.MIN_VALUE,min=Integer.MAX_VALUE,
            mass[]={5,15,39,88,2,3,8,12,45,17,7,67,91,4,65,55,78,23,34,11},
            ResultArray[];
        enterArr(mass, true); //печать массива
        for (int i=0; i<=(mass.length-1); i++){ //поиск минимального и максимального для обращения к ним позже
            if (mass[i]<min){//минимальное
                min=mass[i];
            }
            if (mass[i]>max){//максимальное
                max=mass[i];
            }
        }
        ResultArray=sortArr(mass);//вызываем сортировку и присваиваем это новому массиву
        int from=min, to=(max/2); //для удобства
        System.out.print("Список элементов от "+min+" до "+to+" : ");
        for (int j=0; j<ResultArray.length; j++){ //печать нужных данных из отсортированного массива
            if ((ResultArray[j]>=from)&(ResultArray[j]<=to)){ //если соответствует параметрам задачи
                System.out.print(ResultArray[j]+", "); //печать
            }
        }
        
        
    }
}
Тут комментариев не так много но надеюсь всё понятно. Буду очень благодарен умельцам которые покажут мне как нужно было ПРАВИЛЬНО и ГРАМОТНО реализовать такие программы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2013, 21:43
Ответы с готовыми решениями:

упрощение кода
нужно упростить код : public class VectorTricks { public static...

Рефакторинг кода(упрощение для понимания)
Есть работающая лабораторная работа, я ее сделал, не показывал преподавателю и...

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

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

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2013, 21:43

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

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

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


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

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

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