【问题标题】:User input and months with objects and classes对象和类的用户输入和月份
【发布时间】:2016-02-29 11:10:24
【问题描述】:

我在优化代码中的用户输入时遇到问题,并且在创建基于 Monthnum 字段中包含的数字返回月份名称的新方法 (GetMonthName) 时遇到问题。我的教授还指出:接受 Month 对象作为参数的 equals 方法。如果 参数对象保存与调用对象相同的数据,此方法应返回 真的。否则,它应该返回 FALSE。我不确定参数对象是否与调用对象拥有相同的数据以及如何处理。我的代码如下:

import java.util.Scanner;

public class testObjectsAndClasses {
    public static void main(String args[]){

        Scanner input = new Scanner(System.in);

        System.out.println("Please enter a month number");
        int monthNumber = input.nextInt();
        Monthnum inputMonthName = new Monthnum(monthNumber);


        System.out.println("Enter Month Name, Please Capitalize first Letter");
        String monthName = input.next();
        Monthnum inputMonthNumber = new Monthnum(monthName);

    }
}
class Monthnum{

    public int Monthnum;
    public String monthName;


    public Monthnum(){
        Monthnum = 1;
        monthName = "January";
    }
    public Monthnum(int whichMonth){
        Monthnum = whichMonth;
        if (whichMonth == 1){
            monthName = "January";
            System.out.println("January");
        }
        else if (whichMonth == 2){
            monthName = "February";
            System.out.println("February");
        }
        else if (whichMonth == 3){
            monthName = "March";
            System.out.println("March");
        }
        else if (whichMonth == 4){
            monthName = "April";
            System.out.println("April");
        }
        else if (whichMonth == 5){
            monthName = "May";
            System.out.println("May");
        }
        else if (whichMonth == 6){
            monthName = "June";
            System.out.println("June");
        }
        else if (whichMonth == 7){
            monthName = "July";
            System.out.println("July");
        }
        else if (whichMonth == 8){
            monthName = "August";
            System.out.println("August");
        }
        else if (whichMonth == 9){
            monthName = "September";
            System.out.println("September");
        }
        else if (whichMonth == 10){
            monthName = "October";
            System.out.println("October");
        }
        else if (whichMonth == 11){
            monthName = "November";
            System.out.println("November");
        }
        else if (whichMonth == 12){
            monthName = "December";
            System.out.println("December");
        }
        else {
            System.out.println("Invalid input. Please Capitalize the first letter of the month");
        }

    } //end of cons

    public Monthnum(String whichMonth){
        if (whichMonth.equals("January")){
            Monthnum = 1;
            System.out.println(Monthnum);
        }
        else if (whichMonth.equals("February")){
            Monthnum = 2;
            System.out.println(Monthnum);
        }
        else if (whichMonth.equals("March")){
            Monthnum = 3;
            System.out.println(Monthnum);
        }
        else if (whichMonth.equals("April")){
            Monthnum = 4;
            System.out.println(Monthnum);
        }
        else if (whichMonth.equals("May")){
            Monthnum = 5;
            System.out.println(Monthnum);
        }
        else if (whichMonth.equals("June")){
            Monthnum = 6;
            System.out.println(Monthnum);
        }
        else if (whichMonth.equals("July")){
            Monthnum = 7;
            System.out.println(Monthnum);
        }
        else if (whichMonth.equals("August")){
            Monthnum = 8;
            System.out.println(Monthnum);
        }
        else if (whichMonth.equals("September")){
            Monthnum = 9;
            System.out.println(Monthnum);
        }
        else if (whichMonth.equals("October")){
            Monthnum = 10;
            System.out.println(Monthnum);
        }
        else if (whichMonth.equals("November")){
            Monthnum = 11;
            System.out.println(Monthnum);
        }
        else if (whichMonth.equals("December")){
            Monthnum = 12;
            System.out.println(Monthnum );
        }
        else
            System.out.println("Invalid input");
    }
    int GetMonthnum (int currentMonthNumber){
    Monthnum = currentMonthNumber;
            return currentMonthNumber;
    }
  //public String getMonthName (String monthName)

}

【问题讨论】:

    标签: java oop


    【解决方案1】:

    您应该考虑使用月份名称数组,而不是使用大量 if 和 else if 语句,其中每个名称都对应其索引。现在对于构造函数;对于处理索引(存储它)的构造函数,只需将名称设置为 names[index - 1] 的名称(-1,因为您使用 1 表示一月而不是 0)。对于处理名称的构造函数(存储它),只需在数组 + 1 中找到名称的索引。

    创建一个方法来返回月份是否相等,只需将它们的名称等同起来即可。

    将类视为标识对象类型的东西。它实际上不应该被称为 MonthNum,因为它存储一个月的数据而不是月份的数字。

    此外,如果您希望用户能够在任何情况下输入月份名称,例如FebRUARY,然后使用 name.equalsIgnoreCase(otherName)。

    另一件事,在面向对象的编程中有一个称为数据隐藏或封装的概念,它不允许外部访问类数据,但只能通过方法(getter 和 setter)。注意变量 index 和 name 是私有的而不是公共的,而 getName 和 getIndex 方法是公共的。

    public class Month{
        private static final String[] names = new String[]{"January", "February"... "December"};
        private int index;
        private String name;
        public Month(int index){
          this.index = index;
          name = names[index - 1];
        }
        public Month(String name){
          this.name = name;
          index = java.util.Arrays.asList(names).indexOf(name) + 1;
        }
        public int getIndex(){
          return index;
        }
        public String getName(){
          return name;
        }
        public Boolean equals(Month month){
          return this.name.equals(month.getName());
        }
    }
    

    【讨论】:

      【解决方案2】:

      为简单起见,您可以这样做

      public String getMonthName (int num){
          switch(num){
              case (1):{
                  return "January";
              }
              case (2):{
                  return "February";
              }
              case (3):{
                  return "March";
              }
              case (4):{
                  return "April";
              }
              case (5):{
                  return "May";
              }
              case (6):{
                  return "June";
              }
              case (7):{
                  return "July";
              }
              case (8):{
                  return "August";
              }
              case (9):{
                  return "September";
              }
              case (10):{
                  return "October";
              }
              case (11):{
                  return "November";
              }
              case (12):{
                  return "December";
              }
          }
          return "invalid month Number";
      }
      

      public String getMonthName (int num){
      
          String[] months = {"January","February","March","April","May","June","July","August","September","October","November","December"};
          if(num<1 || num>12){
              return "invalid Month No";
          }
          return months[--num];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 2016-04-05
        • 2018-05-28
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多