简体   繁体   English

有没有更有效的方法可以做到这一点? | 月转换

[英]Is there a more efficient way to do this? | Month conversion

I was given a little task to complete where a user would be asked to input either a month or the numerical equivalent and it would return the numerical value of the entered month, or the month corresponding to the inputted numerical value. 我要完成一个小任务,要求用户输入月份或等效的数字,然后它将返回输入月份的数值或与输入数值对应的月份。 The constraints are as follows: - It must not contain a GUI of any kind - I have to use the BufferedReader for input - I have to use at least one Switch statement 约束如下:-它不能包含任何类型的GUI-我必须使用BufferedReader作为输入-我必须至少使用一个Switch语句

If anyone has any ideas, it would be greatly appreciated. 如果有人有任何想法,将不胜感激。 My code so far is as follows: 到目前为止,我的代码如下:

/**
 * Month task
 * 
 * @author Dan Foad
 * @version 0.01
 */

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Months {
    public static void main(String []args) throws IOException {
        int iInput;
        boolean isParseable;
        String szInput;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Please type either the number of the month, or the month itself to convert.");
        System.out.print("> ");
        szInput = br.readLine();

        try {
            Integer.valueOf(szInput);
            isParseable = true;
        }
        catch(Exception e) {
            isParseable = false;
        }

        if (isParseable) {
            iInput = Integer.valueOf(szInput);
            System.out.println(numberToMonth(iInput));
        }
        else {
            szInput = szInput.toLowerCase();
            System.out.println(monthToNumber(szInput));
        }
        return;
    }

    public static String numberToMonth(int iMonth) {
        String MonthReturn;
        switch(iMonth) {
            case (1): MonthReturn = "January"; break;
            case (2): MonthReturn = "February"; break;
            case (3): MonthReturn = "March"; break;
            case (4): MonthReturn = "April"; break;
            case (5): MonthReturn = "May"; break;
            case (6): MonthReturn = "June"; break;
            case (7): MonthReturn = "July"; break;
            case (8): MonthReturn = "August"; break;
            case (9): MonthReturn = "September"; break;
            case (10): MonthReturn = "October"; break;
            case (11): MonthReturn = "November"; break;
            case (12): MonthReturn = "December"; break;
            default: MonthReturn = "0"; break;
        }
        return MonthReturn;
    }

    public static int monthToNumber(String szMonth) {
        int MonthReturn;
        switch(szMonth) {
            case ("january"): MonthReturn = 1; break;
            case ("february"): MonthReturn = 2; break;
            case ("march"): MonthReturn = 3; break;
            case ("april"): MonthReturn = 4; break;
            case ("may"): MonthReturn = 5; break;
            case ("june"): MonthReturn = 6; break;
            case ("july"): MonthReturn = 7; break;
            case ("august"): MonthReturn = 8; break;
            case ("september"): MonthReturn = 9; break;
            case ("october"): MonthReturn = 10; break;
            case ("november"): MonthReturn = 11; break;
            case ("december"): MonthReturn = 12; break;
            default: MonthReturn = 0; break;
        }
        return MonthReturn;
    }
}

You can also do this: 您也可以这样做:

private static final String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

public static String numberToMonth(int iMonth) {
  return (iMonth < 12 && iMonth > 0) ? monthNames[iMonth - 1] : "None";
}

您可以将字符串“ 1”,“ 2”,“ 3”,...,“ 12”添加到monthToNumber方法中,这样就不必使用String.valueOf将用户输入转换为Integer。

How about this? 这个怎么样?

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Calendar;
import static java.util.Calendar.APRIL;
import static java.util.Calendar.AUGUST;
import static java.util.Calendar.DECEMBER;
import static java.util.Calendar.FEBRUARY;
import static java.util.Calendar.JANUARY;
import static java.util.Calendar.JULY;
import static java.util.Calendar.JUNE;
import static java.util.Calendar.MARCH;
import static java.util.Calendar.MAY;
import static java.util.Calendar.NOVEMBER;
import static java.util.Calendar.OCTOBER;
import static java.util.Calendar.SEPTEMBER;

public class Months {
public static void main(String []args) throws IOException {
    Integer iInput = null;
    String szInput = null;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    System.out.println("Please type either the number of the month, or the month itself to convert.");
    System.out.print("> ");
    szInput = br.readLine();

    boolean wasInt = false;
    try {
      iInput = Integer.valueOf(szInput);
      System.out.println(numberToMonth(iInput));
      wasInt = true;
    }
    catch(Exception e) {
    }

    if (! wasInt) {
        szInput = szInput.toLowerCase();
        System.out.println(monthToNumber(szInput));
    }
    return;
}

public static String numberToMonth(int iMonth) {
    switch(iMonth-1) {
        case (JANUARY): return "January"; 
        case (FEBRUARY): return "February"; 
        case (MARCH): return "March"; 
        case (APRIL): return "April"; 
        case (MAY): return "May"; 
        case (JUNE): return "June"; 
        case (JULY): return "July"; 
        case (AUGUST): return "August"; 
        case (SEPTEMBER): return "September"; 
        case (OCTOBER): return "October"; 
        case (NOVEMBER): return "November";
        case (DECEMBER): return "December";
    }
    return "Unknown";
}

public static int monthToNumber(String szMonth) {
  if (szMonth == null) {
    return 0;
  }
    switch(szMonth.toLowerCase()) {
        case ("january"): return 1 + JANUARY;
        case ("february"): return 1 + FEBRUARY;
        case ("march"): return 1 + MARCH;
        case ("april"): return 1 + APRIL;
        case ("may"): return 1 + MAY;
        case ("june"): return 1 + JUNE;
        case ("july"): return 1 + JULY;
        case ("august"): return 1 + AUGUST;
        case ("september"): return 1 + SEPTEMBER;
        case ("october"): return 1 + OCTOBER;
        case ("november"): return 1 + NOVEMBER;
        case ("december"): return 1 + DECEMBER;
    }
    return 0;
}
}

是的,从数字转月份方法中,您可以按时间顺序创建一个带有月份名称的String数组,然后只需在给定输入值的索引处减去1即可获取字符串。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM