Что нужно пересмотреть, чтобы реализовать модульность с использованием методов

#java #methods

Вопрос:

У меня уже есть эти 3 кода, но наш профессор сказал пересмотреть их снова, используя методы сейчас. Можете ли вы помочь или показать мне, что нужно изменить в каждом коде? 1.)

 public class HeadsOrTails {
    public static void main(String[] args) {
        int Heads = 0;
        int Tails = 0;
        
        for(long simulation = 1; simulation <= 2000000; simulation  = 1)
        {
            int FlipResult = FlipCoin();
            if(FlipResult == 1)
            {
                Heads  = 1;
            }
            else if(FlipResult == 0)
            {
                Tails  = 1;
            }
        }
        System.out.println("Numer of heads appeared: "   Heads);
        System.out.println("Numer of tails appeared: "   Tails);
    }
    private static int FlipCoin() 
    {
        return (int) (Math.random()   0.5);
    }
}
 

2.)

 import java.util.Scanner;

public class DecToHex {
    
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter a decimal number: ");
        int number = input.nextInt();
        int rem;
        
        String result = "";
        char 
        hex[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        while(number > 0)
        {
            rem = number % 16;
            result = hex[rem] resu<
            number = number/16;
        }
        System.out.println("Hexadecimal Number: " result);
    }
}
 

3.)

 import java.util.Scanner;

public class DayOfTheWeek {
    
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter Year: (e.g., 2012): ");
        int year = input.nextInt();
        System.out.print("Enter Month: 1-12: ");
        int month = input.nextInt();
        System.out.print("Enter the Day of the month: 1-31:");
        int day = input.nextInt();
        String DayOfTheWeek = ZCAlgo(day, month, year);
        System.out.println("Day of the week is " DayOfTheWeek);
    }

    public static String ZCAlgo(int day, int month, int year)
    {
        if (month == 1)
        {
            month = 13;
            year--;
        }
        if (month == 2)
        {
            month = 14;
            year--;
        }
        int q = day;
        int m = month;
        int k = year % 100;
        int j = year / 100;
        int h = q   13*(m   1) / 5   k   k / 4   j / 4   5 * j;
        h = h % 7;
        switch (h)
        {
            case 0: return "Saturday";
            case 1: return "Sunday";
            case 2: return "Monday";
            case 3: return "Tuesday";
            case 4: return "Wednesday";
            case 5: return "Thurday";
            case 6: return "Friday";
        }
        return "";
    }
}
 

3.)

 import java.util.Scanner;
public class DayOfTheWeek {
    /* *****************************************************************************
     METHOD NAME    : main
     DESCRIPTION    : Executes the main program to test the class 
                      DayOfTheWeek
    ********************************************************************************/
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter Year: (e.g., 2012): ");
        int year = input.nextInt();
        System.out.print("Enter Month: 1-12: ");
        int month = input.nextInt();
        System.out.print("Enter the Day of the month: 1-31:");
        int day = input.nextInt();
        String DayOfTheWeek = ZCAlgo(day, month, year);
        System.out.println("Day of the week is " DayOfTheWeek);
    }

    public static String ZCAlgo(int day, int month, int year)
    {
        if (month == 1)
        {
            month = 13;
            year--;
        }
        if (month == 2)
        {
            month = 14;
            year--;
        }
        int q = day;
        int m = month;
        int k = year % 100;
        int j = year / 100;
        int h = q   13*(m   1) / 5   k   k / 4   j / 4   5 * j;
        h = h % 7;
        switch (h)
        {
            case 0: return "Saturday";
            case 1: return "Sunday";
            case 2: return "Monday";
            case 3: return "Tuesday";
            case 4: return "Wednesday";
            case 5: return "Thurday";
            case 6: return "Friday";
        }
        return "";
    }
}
 

Ответ №1:

Ваш профессор хочет, чтобы вы не вводили повторяющийся код. Они хотят, чтобы вы минимизировали объем кода, который вам приходится повторно вводить. Например, посмотрите на main метод из вашего DayOfTheWeek класса.

 public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter Year: (e.g., 2012): ");
    int year = input.nextInt();
    System.out.print("Enter Month: 1-12: ");
    int month = input.nextInt();
    System.out.print("Enter the Day of the month: 1-31:");
    int day = input.nextInt();
    //After this is more code below that we don't care about for now
}
 

Вам нужно было сделать 3 System.out.print() звонка. Вы также сделали 3 input.nextInt() звонка. Всего 6 звонков.

Обратите внимание, как происходит System.out.print() звонок, а затем input.nextInt() звонок сразу после этого? Мы можем свести это к чему-то вроде этого.

 public static int fetchInput(Scanner input, String message) {
    System.out.print(message);
    return input.nextInt();
}

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    
    int year = fetchInput(input, "Enter Year: (e.g., 2012): ");
    int month = fetchInput(input, "Enter Month: 1-12: ");
    int day = fetchInput(input, "Enter the Day of the month: 1-31:");
    //After this is more code below that we don't care about for now
}
 

Теперь нам нужно набрать всего fetchInput() 3 раза, что означает вызов обоим System.out.print() и input.nextInt() , что дает нам в общей сложности 5 вызовов.

Итак, 5 меньше, чем 6, что означает, что мы продвинулись к нашей цели, но поскольку это всего на один звонок меньше, это может показаться незначительным. Но на самом деле в вашем коде гораздо больше повторов — я только что передал вам один из них. Кроме того, ваш профессор учит вас хорошим привычкам, которые помогут вам, если вы когда-нибудь станете программистом. Что, если вместо того, чтобы брать 3 вещи, вам нужно было взять 20? Кстати, это обычное дело в реальном мире. Используя свой старый стиль, вам пришлось бы набрать как System.out.print() минимум 20 и 20 input.nextInt() звонков, что составило бы около 40 звонков. Но, делая это по-новому, вам нужно будет ввести только 20 fetchInput() вызовов, в которых есть System.out.print() вызов и input.nextInt() вызов внутри него, в результате чего общее количество вызовов для нового метода составит 22. 40 против 22 вещей для ввода-это более наглядный пример того, как написание кода, сводящего к минимуму повторный ввод одного и того же, экономит ваше время.