Error: error class interface or enum expected in Java class

Error: error class interface or enum expected in Java class

不幸的是,我相信我知道这个问题 - 我有一个不合时宜的支架,但我查看了我的代码,它似乎一切正常 - 我逐行仔细研究它但找不到是什么导致了这个错误(当我按原样 运行 代码时,我得到了 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也是如此。

您设置这些数组的方式仅在声明时有效。假设您需要在 class 的构造函数中设置它们,它们不能那样设置。

private String[] monthNames = new String[12];
private String[] dayNames = new String[7];

可以替换为:

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

因为这是数组常量,必须在声明时初始化。也不需要有默认构造函数,因为 class 没有构造函数只调用默认构造函数。所以删除它以减少额外的编码。

我在这里看到两个问题..

  1. 数组的索引从 0 开始,您的月份和日期变量从 1 而不是 0 开始。

  2. 您已经创建了一个字符串数组,但随后您正在更改您的参考 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;
            }