这可能实现或者我错误地理解了这个问题吗? 这是个问题:
实现一个具有整数数据成员的MyDate类来存储月,日,
和年。该类应该有一个允许的三参数构造函数
在创建新MyDate对象时设置的日期。如果用户创建了
MyDate对象没有传递任何参数,或者传递了任何值
无效,默认值为1,1,2001(即2001年1月1日)应该是
用过的。该类应具有成员函数以在下面打印日期
格式:
3/15/10
2010年3月15日
2010年3月15日
通过编写一个类TestMyDate来演示MyDate类的用法 声明MyDate类型的对象并使用all显示它的main方法 3种格式。 输入验证:仅接受月份1到12之间的值 当天1和31,以及1950年和2020年之间。
我已经实现了这个问题,但是在创建新对象时插入值时,我似乎无法验证用户输入。我怎样才能做到这一点?请不要告诉我做研究,因为我已经做过了。如果Google可以向我提供答案,我将不会来到这里。请帮帮我。
这是我的代码:
MyDate课程:
package Number1;
public class MyDate {
private int month;
private int day;
private int year;
public MyDate()
{
month = 1;
day = 1;
year = 2001;
}
public MyDate(int m,int d,int y)
{
this.month = m;
this.day = d;
this.year = y;
}
public int getMonth()
{
return month;
}
public int getDay()
{
return day;
}
public int getYear()
{
return year;
}
public void Format1()
{
int m,d,y,afterM;
m = getMonth();
d = getDay();
y = getYear();
afterM = y % 100;
System.out.println(""+m+"/"+d+"/"+afterM);
}
public void Format2()
{
int m,d,y;
String word = null;
m = getMonth();
d = getDay();
y = getYear();
switch(m)
{
case 1:
{
word = "January";
break;
}
case 2:
{
word = "February";
break;
}
case 3:
{
word = "March";
break;
}
case 4:
{
word = "April";
break;
}
case 5:
{
word = "May";
break;
}
case 6:
{
word = "June";
break;
}
case 7:
{
word = "July";
break;
}
case 8:
{
word = "August";
break;
}
case 9:
{
word = "September";
break;
}
case 10:
{
word = "October";
break;
}
case 11:
{
word = "November";
break;
}
case 12:
{
word = "December";
break;
}
default:
{
System.out.println("Please enter a number between 1-12");
break;
}
}
System.out.println(""+word+" "+d+","+y);
}
public void Format3()
{
int m,d,y;
String word = null;
m = getMonth();
d = getDay();
y = getYear();
switch(m)
{
case 1:
{
word = "January";
break;
}
case 2:
{
word = "February";
break;
}
case 3:
{
word = "March";
break;
}
case 4:
{
word = "April";
break;
}
case 5:
{
word = "May";
break;
}
case 6:
{
word = "June";
break;
}
case 7:
{
word = "July";
break;
}
case 8:
{
word = "August";
break;
}
case 9:
{
word = "September";
break;
}
case 10:
{
word = "October";
break;
}
case 11:
{
word = "November";
break;
}
case 12:
{
word = "December";
break;
}
default:
{
System.out.println("Please enter a number between 1-12");
break;
}
}
System.out.println(""+d+" "+word+" "+y);
}
}
主要的TestMyDate:
package Number1;
public class TestMyDate {
public static void main(String[] args) {
MyDate D = new MyDate(7,23,2013);
D.Format1();
System.out.println();
D.Format2();
System.out.println();
D.Format3();
}
}
这些代码仅返回这些不同格式的日期。感谢您的帮助。
答案 0 :(得分:2)
我认为您可以在throw new IllegalArgumentException("illegal date")
中进行验证和MyDate()
,以使所有客户端代码严格遵守规则:
public MyDate(int m,int d,int y)
{
// do some validate here
if (!validate(m, d, y))
throw new IllegalArgumentException("illegal date")
this.month = m;
this.day = d;
this.year = y;
}
private boolean validate(int m, int d, int y){
// use here as the central place of your validation (Format1(), Format2(), Format3(), ...)
}
答案 1 :(得分:1)
我建议你
我建议你不要用类来输入它自己的值。这使得课程过于复杂。
我还建议你使用数组而不是long switch语句。您可以使用两行代码替换switch语句。
答案 2 :(得分:1)
在将它们分配给成员变量之前,您需要在构造函数中运行验证。您最好的选择是创建返回bool的私有方法,以便在将setter添加到这些属性时可以重用逻辑。
public MyDate(int m, int d, int y)
{
if (monthIsValid(m)) {
this.month = m;
}
if (dayIsValid(d)) {
this.day = d;
}
if (yearIsValid(y)) {
this.year = y;
}
}
使用switch语句很好,虽然我只在一个地方使用它,并从Format
方法调用它。