【问题标题】:What to revise to make it implement modularization using methods修改什么使其使用方法实现模块化
【发布时间】:2021-09-26 14:33:02
【问题描述】:

我已经制作了这 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]+result;
            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 "";
    }
}

【问题讨论】:

    标签: java methods


    【解决方案1】:

    您的教授希望您避免输入重复的代码。他们希望您尽量减少必须重复输入的代码量。例如,查看 DayOfTheWeek 类中的 main 方法。

    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,这意味着我们已经朝着我们的目标取得了进展,但由于它只是少了一个调用,它可能看起来并不重要。但实际上,您的代码中有更多重复——我只是把其中一个交给了您。最重要的是,您的教授正在教您养成良好的习惯,如果您成为程序员,这些习惯将对您有所帮助。如果您需要获取 20 个而不是获取 3 个东西怎么办?顺便说一句,这在现实世界中很常见。使用您的旧样式,您必须至少键入 20 个 System.out.print() 和 20 个 input.nextInt() 呼叫,这样您就需要大约 40 个呼叫。但是以这种新方式执行此操作,您只需要键入 20 个 fetchInput() 调用,其中包含一个 System.out.print() 调用和一个 input.nextInt() 调用,使我们的新方法调用总数为 22 个。键入 40 对 22 是一个更容易理解的示例,说明如何编写代码以最大限度地减少重复键入相同的内容可以节省您的时间。

    【讨论】:

      猜你喜欢
      • 2021-04-24
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 2011-06-07
      • 1970-01-01
      相关资源
      最近更新 更多