Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象和类的用户输入和月份_Java_Oop - Fatal编程技术网

Java 对象和类的用户输入和月份

Java 对象和类的用户输入和月份,java,oop,Java,Oop,我在优化代码中的用户输入时遇到问题,并且在创建基于Monthnum字段中包含的数字返回月份名称的新方法(GetMonthName)时遇到问题。我的教授还说:一个接受一个月对象作为参数的equals方法。如果 参数对象与调用对象持有相同的数据,此方法应返回 对。否则,它应该返回FALSE。我不确定参数对象是否与调用对象持有相同的数据,以及如何处理。我的代码如下: import java.util.Scanner; public class testObjectsAndClasses {

我在优化代码中的用户输入时遇到问题,并且在创建基于Monthnum字段中包含的数字返回月份名称的新方法(GetMonthName)时遇到问题。我的教授还说:一个接受一个月对象作为参数的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)

}

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

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

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

此外,如果您希望用户能够在任何情况下输入月份名称,例如二月,则只需使用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());
    }
}

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

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";
}

公共字符串getMonthName(int num){
字符串[]个月={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};
如果(num12){
返回“无效月号”;
}
返回月份[--num];
}
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];
}