错误:Java类中需要错误类接口或枚举
不幸的是,我相信我知道这个问题-我有一个大括号,但我看了看我的代码,它似乎是在工作秩序-我已经仔细研究了它一行又一行,找不到什么可能导致这个错误,我得到了19个当我运行代码是这样的。有人能提供帮助吗?这里还有什么我遗漏的吗?先谢谢你。这是我的密码:错误:Java类中需要错误类接口或枚举,java,curly-braces,Java,Curly Braces,不幸的是,我相信我知道这个问题-我有一个大括号,但我看了看我的代码,它似乎是在工作秩序-我已经仔细研究了它一行又一行,找不到什么可能导致这个错误,我得到了19个当我运行代码是这样的。有人能提供帮助吗?这里还有什么我遗漏的吗?先谢谢你。这是我的密码: public class DateGenerator { private int month, day; private String newDate; private String[] monthNames = new S
public class DateGenerator
{
private int month, day;
private String newDate;
private String[] monthNames = new String[12];
private String[] dayNames = new String[7];
public DateGenerator()
{
monthNames = {"Jan", "Feb", "Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"};
dayNames = {"Mon", "Tues", "Wed", "Thur", "Fri", "Sat", "Sun"};
month = 1;
}
public void setMonth(int m)
{
month = m;
//System.out.println("XXXXXXXXXXXXXXXXXXXSETMONTH IS: " + month);
calculate();
}
public String getRandomDate()
{
return newDate;
}
private void calculate()
{
switch(month)
{
case 2: //Feb 1-28
day = (int)(Math.random()*28);
//System.out.println("MADE IT HERE1 and day is " + day);
break;
case 4: case 6: case 9: case 11:
day = (int)(Math.random()*30);
//System.out.println("MADE IT HERE2 and day is " + day);
break;
default:
day = (int)(Math.random()*31);
//System.out.println("MADE IT HERE3 and day is " + day);
break;
}
if(day == 0) day = 1;
int dayn = (int)(Math.random()*7);
//System.out.println("Dayn is " + dayn);
newDate = dayNames[dayn] + ", " + monthNames[month]+ " " + day;
//System.out.println(newDate);
}
}
问题在于数组初始值设定项 而不是:
dayNames = {"Mon", "Tues", "Wed", "Thur", "Fri", "Sat", "Sun"};
你应该:
dayNames = new String[]{"Mon", "Tues", "Wed", "Thur", "Fri", "Sat", "Sun"};
monthNames也一样
设置这些数组的方式只能在声明时使用。假设您需要在类的构造函数中设置它们,则不能这样设置
及
可替换为:
private String[] monthNames;
private String[] dayNames;
除非你有另一个构造器在将来不设置它们。
这是为了避免无用的分配,因为这些字段中的每个字段都会收到构造函数中创建的新数组。您应该将初始化更改为:
private int month = 1, day;
private String newDate;
private String[] monthNames = {"Jan", "Feb", "Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"};
private String[] dayNames = {"Mon", "Tues", "Wed", "Thur", "Fri", "Sat", "Sun"};
因为这是数组常量,必须在声明时初始化。此外,不需要有默认构造函数,因为没有构造函数的类只调用默认构造函数。因此,请删除它以减少额外的编码。我在这里看到两个问题 数组的索引从0开始,月份和日期变量从1开始,而不是0 您已经创建了一个字符串数组,但是您正在更改引用。Shlublu已经解释了这一点,并建议了一个正确的答案
private String[] monthNames = new String[12];
private String[] dayNames = new String[7];
public DateGenerator()
{
monthNames = {"Jan", "Feb", "Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"};
dayNames = {"Mon", "Tues", "Wed", "Thur", "Fri", "Sat", "Sun"};
month = 1;
}
你的解决方案会奏效,但你给出的理由毫无意义。因为这是数组常量,必须在声明时初始化。不是真的,这些不是常量-您可以随时更改数组。@ErwinBolwidt编译器给出如下错误;数组常量只能用于初始值设定项我不认为我错了。初始值设定项是整个语句。数组常量是RHS。正在初始化的对象是LHS。因此,数组常量没有被初始化。首先我认为你错了,但事实上,这是真的。但是在声明行@Shivam上完成初始化时,可以使用不带新字符串[]的初始值设定项suggests@Stephan是的,也可以这样做。这就是为什么我说假设你需要在构造函数中设置它们。例如,如果以后根据参数传递的区域设置对其进行翻译。谢谢大家!在你的帮助下,一切顺利。非常感谢。
private String[] monthNames = new String[12];
private String[] dayNames = new String[7];
public DateGenerator()
{
monthNames = {"Jan", "Feb", "Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"};
dayNames = {"Mon", "Tues", "Wed", "Thur", "Fri", "Sat", "Sun"};
month = 1;
}