Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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_Curly Braces - Fatal编程技术网

错误:Java类中需要错误类接口或枚举

错误:Java类中需要错误类接口或枚举,java,curly-braces,Java,Curly Braces,不幸的是,我相信我知道这个问题-我有一个大括号,但我看了看我的代码,它似乎是在工作秩序-我已经仔细研究了它一行又一行,找不到什么可能导致这个错误,我得到了19个当我运行代码是这样的。有人能提供帮助吗?这里还有什么我遗漏的吗?先谢谢你。这是我的密码: public class DateGenerator { private int month, day; private String newDate; private String[] monthNames = new S

不幸的是,我相信我知道这个问题-我有一个大括号,但我看了看我的代码,它似乎是在工作秩序-我已经仔细研究了它一行又一行,找不到什么可能导致这个错误,我得到了19个当我运行代码是这样的。有人能提供帮助吗?这里还有什么我遗漏的吗?先谢谢你。这是我的密码:

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