我被要求根据某些指令对程序(类)进行编码。我觉得我几乎把它搞砸了,但我做的事情很愚蠢。我无法弄清楚如何将连字符添加到符号常量中,这样当我键入INSERT_HYPHEN时,它会在“访问器”方法中插入“ - ”。它说不兼容的类型> :(当我尝试将局部变量“fullDate”插入'getFullDate'访问器方法,然后输入“fullDate = year + month + day”时,它表示'不兼容的类型!也许是因为accesor方法是一个字符串,我试图在其中添加“int”。我找不到解决方法。这是我的代码。
public class Date
{
public static final int INSERT_ZERO = 0;
public static final char INSET_HYPHEN = -; //ERROR incompatible types
// instance variables - replace the example below with your own
private int year;
private int month;
private int day;
/**
* Default constructor
*/
public Date()
{
setYear (2013);
setMonth (01);
setDay (01);
}
/**
*
*/
public Date (int whatIsYear, int whatIsMonth, int whatIsDay)
{
setYear (whatIsYear);
setMonth (whatIsMonth);
setDay (whatIsDay);
}
/**
*@return year
*/
public int getYear()
{
return year;
}
/**
*@return month
*/
public int getMonth()
{
return month;
}
/**
*@return day
*/
public int getDay()
{
return day;
}
/**
*@return
*/
public String getFullDate()
{
String fullDate;
if (whatIsMonth < 10); // the year, month, and day all give me incompatible types :(
{
fullDate = year + INSERT_HYPHEN + INSERT_ZERO + month + INSERT_HYPHEN + day;
}
if (whatIsDay < 10);
{
fullDate = year + INSERT_HYPHEN + month + INSERT_HYPHEN + INSERT_ZERO + day;
}
else
{
fullDate = year + INSERT_HYPHEN + month + INSERT_HYPHEN + day;
}
return year + month + day;
}
/**
*
*/
public void setYear (int whatIsYear)
{
if ((whatIsYear >= 1990) && (whatIsYear <= 2013))
{
year = whatIsYear;
}
else
{
year = 2013;
}
}
/**
*
*/
public void setMonth (int whatIsMonth)
{
if ((whatIsMonth >= 1) && (whatIsMonth <= 12))
{
month = whatIsMonth;
}
else
{
month = 01;
}
}
/**
*
*/
public void setDay (int whatIsDay)
{
if ((whatIsDay >= 1) && (whatIsDay <= 31))
{
day = whatIsDay;
}
else
{
day = 01;
}
}
}
仅为更多背景。我正在构建的这个类有三个字段,用于保存年,月和日。年份可以在1900年到当前年份之间。月份可以在1到12之间 包括的。天数可以在1到31之间。我必须在代码中使用符号常量而不是“魔术”数字,例如public static final int FIRST_MONTH = 1;
默认构造函数将year设置为当前年份,将月份设置为第一个月,将日期设置为第一天。非默认构造函数测试每个参数。如果year参数超出可接受的范围,则将字段设置为当前年份。如果month参数超出可接受的范围,则将字段设置为第一个月。如果day参数超出可接受范围,则将字段设置为第一天。
每个字段都有一个存取方法和一个mutator方法。所有三个mutator方法都检查它们的参数是否有效,如果无效,则以与非默认相同的方式设置相应的字段 构造
这是我遇到麻烦的部分。我必须包含一个名为“public String getFullDate()的方法,该方法返回一个字符串,其日期格式为:YYYY-MM-DD,例如2012-01-01。带有单个数字的月份和日期用前导零填充。 “
任何帮助都会受到赞赏,即使只是一个想法:)谢谢。
答案 0 :(得分:6)
你应该使用单引号:
public static final char INSET_HYPHEN = '-';
答案 1 :(得分:1)
fullDate = String.format("%d-%02d-%02d", year, month, day);
答案 2 :(得分:0)
char
类型仅包含用单引号括起来的数据。如果要使用双引号,则数据类型应为string
答案 3 :(得分:0)
除了声明字符错误的语法错误之外,您正试图在getFullDate() method
public Date(int whatIsYear,int whatIsMonth,int whatIsDay)
public String getFullDate()
{
String fullDate;
if (whatIsMonth < 10); // the year, month, and day all give me incompatible
//rest of the code
}
whatIsMonth , whatIsDay 是构造函数中定义的局部变量,您不能在构造函数之外使用这些变量。
你的getFullDate()方法应该使用你的实例变量year
,month
和'day'。请注意int whatIsYear, int whatIsMonth, int whatIsDay
只是构造函数参数,仅限于构造函数。你不能在构造函数外访问它们。
答案 4 :(得分:0)
您无法添加字符串文字,如果您想使用上述内容: 然后尝试这个
public static final CHARACTER INSET_HYPHEN = new CHARACTER('-');
或
public static final char INSET_HYPHEN = '-';
答案 5 :(得分:0)
public static final char INSET_HYPHEN = '-';
代替public static final char INSET_HYPHEN = -;
- 应始终在撇号之间定义字符。getFullDate()
的逻辑是错误的,让String.format
为你做脏事更好。此外,getFullDate()
会返回year + month + day
,这是一个整数,而不是返回fullDate
。此代码应该有效:
public class Date {
private static final int DEFAULT_YEAR = 2013;
private static final int DEFAULT_MONTH = 1;
private static final int DEFAULT_DAY = 1;
private static final char SEPARATOR = '-';
private int year;
private int month;
private int day;
/**
* Default constructor
*/
public Date() {
this(DEFAULT_YEAR, DEFAULT_MONTH, DEFAULT_DAY);
}
/**
*
*/
public Date (int year, int month, int day) {
setYear(year);
setMonth(month);
setDay(day);
}
/**
*@return year
*/
public int getYear() {
return year;
}
/**
*@return month
*/
public int getMonth() {
return month;
}
/**
*@return day
*/
public int getDay() {
return day;
}
/**
*@return
*/
public String getFullDate() {
return String.format("%d%c%02d%c%02d", year, SEPARATOR, month, SEPARATOR, day);
}
/**
*
*/
public void setYear (int year)
{
this.year = ((year >= 1990) && (year <= DEFAULT_YEAR)) ? year : DEFAULT_YEAR;
}
/**
*
*/
public void setMonth (int month)
{
this.month = ((month >= 1) && (month <= 12)) ? month : DEFAULT_MONTH;
}
/**
*
*/
public void setDay (int day)
{
this.day = ((day >= 1) && (day <= 31)) ? day : DEFAULT_DAY;
}
}