形成这个if语句的更好方法是什么?

sir*_*omz 1 java if-statement system.out

我目前正在从一本书中学习java,一个项目是在输入月份数后输出一个月的日期和月份名称.我想知道是否有更好的方法来设置我的if语句而不是我已经完成的事情.

PS:控制台阅读器只是一个包含的类,可以轻松地从用户控制台获取输入.

public class Project13 {

public static void main(String[] args) {
    ConsoleReader console = new ConsoleReader(System.in);

    System.out.println("Enter a month you would like to evaluate (by number):");
    int month = console.readInt();

    int days = 0;
    String monthout = "Month";
    String out = "Yes";
    if(month == 1){
        days = 31;
        monthout = "January";
        out = "There are " + days + " days in " + monthout;
    }else if(month == 2){
        System.out.println("Is it a leap year? Yes or No:");
        String leap = console.readLine(); 
        if(leap.equalsIgnoreCase("yes")){
            days = 29;
            monthout = "February";
            out = "There are " + days + " days in " + monthout;
        }else if(leap.equalsIgnoreCase("no")){
            days = 28;
            monthout = "February";
            out = "There are " + days + " days in " + monthout;
        }else{
            out = "Something went wrong, please try again";
        }
    }else if(month == 3){
        days = 31;
        monthout = "March";
        out = "There are " + days + " days in " + monthout;
    }else if(month == 4){
        days = 30;
        monthout= "April";
        out = "There are " + days + " days in " + monthout;
    }else if(month == 5){
        days = 31;
        monthout = "May";
        out = "There are " + days + " days in " + monthout;
    }else if(month == 6){
        days = 30;
        monthout = "June";
        out = "There are " + days + " days in " + monthout;
    }else if(month == 7){
        days = 31;
        monthout = "July";
        out = "There are " + days + " days in " + monthout;
    }else if(month == 8){
        days = 31;
        monthout = "August";
        out = "There are " + days + " days in " + monthout;
    }else if(month == 9){
        days = 30;
        monthout = "September";
        out = "There are " + days + " days in " + monthout;
    }else if(month == 10){
        days = 31;
        monthout = "October";
        out = "There are " + days + " days in " + monthout;
    }else if(month == 11){
        days = 30;
        monthout = "November";
        out = "There are " + days + " days in " + monthout;
    }else if(month == 12){
        days = 31;
        monthout = "December";
        out = "There are " + days + " days in " + monthout;
    }else if(month > 12){
        out = "Your month input was not valid. Please try again.";
    }

    System.out.println(out);
}

}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 9

您可以if用一对数组替换几乎整个语句,如下所示:

int dayCount[] = new int[] {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
String monthName[] = new String[] {"January", "February", ...};
Run Code Online (Sandbox Code Playgroud)

有了这两个数组,你可以这样做:

// February is the only month that needs special handling
if (month == 2) {
    // Do your special handling of leap year etc...
} else if (month >= 1 && month <= 12) {
    // All other valid months go here. Since Java arrays are zero-based,
    // we subtract 1 from the month number
    days = dayCount[month-1];
    monthout = monthName[month-1];
} else {
    // Put handling of invalid month here
}
out = "There are " + days + " days in " + monthout;
Run Code Online (Sandbox Code Playgroud)

  • +1.这是唯一的答案,它不仅仅用过程转换语句集合替换过程if语句的集合,而是使用合理的编程原则. (2认同)

nhg*_*rif 5

switch(month) {
    case 1:
        // stuff
        break;
    case 2:
        // etc.....
Run Code Online (Sandbox Code Playgroud)

如果你要这样做,你绝对应该使用一个enum代表几个月而不仅仅是整数...