猿问

使复活节计算器代码更高效的可能方法?

这是我的复活节计算器的代码。工作正常,想知道是否有一种方法可以提高效率(尤其是月份选择部分)。if 语句非常长,想知道我是否可以使用数组来选择月份。对于将来的参考,这样的 if 语句将非常耗时,感谢您的反馈。


import java.util.*;

import java.lang.Math;


class Main {

    public static void main(String[] args) {

        Scanner userInput = new Scanner(System.in);


        System.out.println("\nWelcome to the Easter Calculator. Please enter the current year below.");

        int y = userInput.nextInt();


        int p = y/100;


        int q = y - (19*(y/19));


        int r = (p-17)/25;


        int s = p - (p/4) - ((p-r)/3) + (19*q) + 15;


        s = s - (30*(s/30));


        s = s - ((s/28)*1-((s/28)*(29/(s+1))*((21-q)/11)));


        int t = y + (y/4) + s + 2 - p + (p/4);


        t = t - (7*(t/7));


        int u = s - t;


        int m = 3 + ((u+40)/44);


        int d = u + 28 - (31*(m/4));


        String month;


        if(m == 1){

            month = "January";

        }

        else if(m == 2){

            month = "February";

        }

        else if(m == 3){

            month = "March";

        }

        else if(m == 4){

            month = "April";

        }

        else if(m == 5){

            month = "May";

        }

        else if(m == 6){

            month = "June";

        }

        else if(m == 7){

            month = "July";

        }

        else if(m == 8){

            month = "August";

        }

        else if(m == 9){

            month = "September";

        }

        else if(m == 10){

            month = "October";

        }

        else if(m == 11){

            month = "November";

        }

        else{

            month = "December";

        }


        System.out.println("\nEaster will be on "+month+" "+d+", "+y+".");


    }

}



MYYA
浏览 132回答 4
4回答

喵喔喔

可能用最少的代码行进行最快的解码是通过一个字符串数组,我们称之为monthNames,包含所有月份的名称。它的长度为 12,并且由于数组索引是从 0 开始的,因此您必须以这种方式获取字符串,例如第 1 个月的字符串:String month = monthNames[m-1];

皈依舞

其他人提到过,但我也会选择数组就像是:    String month = "";    int m = 1; // january    String[] months = {"January", "Febuary", "March", "April", "May", "June", "July", "August",            "September", "October", "November", "December"};    month = months[m-1];

狐的传说

switch 语句和字符串数组一样有效。我发现该数组更容易使用!//Array to hold each month of the yearString monthArray[] = {"January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};//Final output statement stating the month, day, and year easter will be held.System.out.println("\nEaster will be on "+monthArray[m-1]+" "+d+", "+y+".");

守着一只汪

我建议使用 switch 语句。这里有一些可以让你开始的事情:switch(m) {    case 1: month = "January";        break;    case 2: month = "February";        break;    case 3: month = "March";        break;    case 4: month = "April";        break;    ...    case 11: month = "November";        break;    default: month = "December";}另外,我建议正确缩进代码,这样如果出现任何问题,可以更轻松地阅读和调试。另外,我建议为变量指定有意义的名称。单字母名称没有多大意义,因此很快就会变得非常混乱。
随时随地看视频慕课网APP

相关分类

Java
我要回答