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