@WannaCreative

Зачем писать такой большой код?

Всем привет , дорогие друзья!
Вот потихоньку учу Java, и, тут возник один вопрос.
Зачем писать прочие методы, если из за этого получается код длинее?
В чем различия, и, нужно ли все таки писать с методами?
public class Main
{
    public static void main(String[] args) throws IOException{
        int[] array = new int[5];
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        for (int i = 0; i < array.length; i++){
            String s = reader.readLine();
            int value = Integer.parseInt(s);
            array[i] = value;
        }
        InitializeArray(array);
    }
    public static int[] InitializeArray(int[] array){
        int max = array[0];
        int min = array[0];
        for (int i = 0; i < array.length; i++){
            if (max < array[i])
                max = array[i];
            if (min > array[i])
                min = array[i];
        }
        WriteLine(min, max);
        return array;
    }
    private static void WriteLine(int minimum, int maximum){
        System.out.println("Minumum is: "+minimum);
        System.out.println("Maximum is: "+maximum);
    }
}

Это пример с методами, а вот без них
public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int[] array = new int[5];
        for (int i = 0; i < array.length; i++){
            String s = reader.readLine();
            int value = Integer.parseInt(s);
            array[i] = value;
        }

        int minimum = array[0];
        int maximum = array[0];

        for (int i = 0; i < array.length; i++){
            if (minimum > array[i])
                minimum = array[i];
            if (maximum < array[i])
                maximum = array[i];
        }
        System.out.println("Maximum is: "+maximum);
        System.out.println("Minimum is: "+minimum);
    }

}


P.S | Во втором случае код короче, и легче понять, лично мне
  • Вопрос задан
  • 765 просмотров
Решения вопроса 3
alexyat
@alexyat
iOS Developer
Все зависит от ситуации - метод решает какую-то отдельную задачу, разделение на методы нужно для того чтобы не повторять один и тот же код, а просто вызвать готовый метод. Позволяет структурировать код. Избегать ошибок - вы решили немного поменять код и не нужно лезть и искать по всему проекту, где вы его использовали, просто исправляете метод. В вашем случаи, если вы не собираетесь вызывать те методы из других функций, то можно все совместить в одной.
Ответ написан
@Firik67
Middle PHP Developer
Разница в том, что за лапшу из 200-300 строк без методов, вас побьют. Ибо читать это невозможно. И, возможно, нарушит кучу принципов проектирования. В вашем случае без методов допустимо сделать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@Aleshonne
Научные вычисления
Лучше выделять в отдельные методы блоки кода, решающие определённую задачу или используемые многократно, чтобы потом самому меньше путаться и сильно упростить жизнь людям, пытающимся разобраться в вашем коде.
Но в данном случае за такое разбиение программиста нужно бить большой дубиной: метод InitializeArray не инициализирует массив, а ищет минимум и максимум, печатает их в консоль и зачем-то возвращает свой параметр, хотя он его не изменял. Метод WriteLine печатает не одну строку, а две. Главный метод никак не использует возвращаемое значение метода InitializeArray. В общем, лучше не разбивать на методы совсем, чем разбивать так.
Ответ написан
@asd111
Насколько я понял метод InitializeArray находит минимум и максимум в массиве и затем печатает их.
Поэтому желательно назвать метод InitializeArray так чтобы из названия было понятно что он делает. Например вместо InitializeArray можно назвать метод find_min_and_max_and_print_them - т.е. найти минимум и максимум и вывести их. От метода WriteLine можно избавиться потому что он ничего по сути не делает.
Ещё можно обернуть в функцию место где создается массив и вводятся данные.
И ещё нужно сделать чтобы размер массива где то указывался.
В java конечно CamelCase, но на мой взгляд underscore легче читается.
Куски кода нужно оборачивать в функции для инкапсуляции, т.е. чтобы скрыть подробности работы за названием функции, поэтому функциям нужно давать имена из которых понятно что данная функция делает. Например InitializeArray - не очень понятное название для функции которая ищет и выводит максимум и минимум. А например если такую функцию назвать Найти_минимум_и_максимум_в_массиве_и_вывести_значения - то сразу всё понятно.

Код не проверял возможно есть ошибки, но думаю примерная суть понятна.
Т.е. в целом можно сделать так:
public class Main
{
    const int ARRAY_SIZE = 5;
    public static void main(String[] args) throws IOException{
        int[] working_array = create_array_and_fill_it_from_stdin();
        find_max_and_min_in_array_and_print_them(working_array);
    }
    public static int[] create_array_and_fill_it_from_stdin(){
        int[] array = new int[ARRAY_SIZE];
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        for (int i = 0; i < array.length; i++){
            String s = reader.readLine();
            int value = Integer.parseInt(s);
            array[i] = value;
        }
        return array;
    }
    public static void find_max_and_min_in_array_and_print_them(int[] array){
        int max = array[0];
        int min = array[0];
        for (int i = 0; i < array.length; i++){
            if (max < array[i])
                max = array[i];
            if (min > array[i])
                min = array[i];
        }
        System.out.println("Minumum is: "+min);
        System.out.println("Maximum is: "+max);        
    }
}
Ответ написан
@abcd0x00
Изучи метод разработки "сверху вниз". Если его не освоишь, ничего длиннее ста строк писать не будешь.
wiki. структурное программирование
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
XCritical Software Санкт-Петербург
До 370 000 ₽
MediaSoft Ульяновск
от 80 000 до 150 000 ₽
27 окт. 2020, в 15:42
1000 руб./в час
27 окт. 2020, в 15:30
100000 руб./за проект
27 окт. 2020, в 15:28
100000 руб./за проект