2015-11-07 95 views
0

不幸的是,我相信我知道这个问题 - 我有一个特别的问题,但是我查看了我的代码,它似乎都处于工作状态 - 我已经一行一行地仔细查看,并找不到可能导致此错误的原因(当我按原样运行代码时,我得到了其中的19个)。任何人都可以提供帮助吗?还有什么我在这里失踪?先谢谢你。这里是我的代码:错误:错误类接口或Java类中预期的枚举

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

} 
+1

谢谢大家!得到它与你的帮助工作。非常感激。 – Jdill

回答

0

问题出在你的数组初始值设定项。

相反的:

dayNames = {"Mon", "Tues", "Wed", "Thur", "Fri", "Sat", "Sun"}; 

你应该有:

dayNames = new String[]{"Mon", "Tues", "Wed", "Thur", "Fri", "Sat", "Sun"}; 

与同为monthNames

您设置这些数组的方式只能在声明时使用。假设你需要在类的构造函数中设置它们,它们不能以这种方式设置。

而且

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

可以被替换为:

private String[] monthNames; 
private String[] dayNames; 

,除非你有另一个构造不设置他们的未来。 这是为了避免无用的分配,因为每个这些字段都会收到在构造函数中创建的新数组。

+0

首先,我以为你错了,但事实上,那是真的。但是当在声明行上完成初始化时,可以使用不带'new String []'的初始化程序,因为@Shivam建议使用 – Stephan

+0

@Stephan是的,它也可以这样完成。这就是为什么我说“假设你需要在构造函数中设置它们”。例如,如果稍后进行翻译,则取决于参数传递的区域设置。 – Shlublu

0

您应该将初始化改成这样:

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

因为这都是数组常量,必须在报关时被初始化。也没有必要有一个默认构造函数,因为没有构造函数的类仅调用默认构造函数。所以删除它可以减少额外的编码。

+2

您的解决方案将起作用,但您给出的理由没有意义。 “因为这是数组常量,必须在声明时初始化。”这不是真的,这些都不是常数 - 你可以随时改变阵列。 –

+0

@ErwinBolwidt编译器给出这样的错误; “数组常量只能在初始化程序中使用”我不认为我错了。 – Shivam

+0

初始化程序是整个语句。数组常量是RHS。正在初始化的东西是LHS。因此,数组常量没有被初始化。 –

0

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

  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; 
         } 
    
相关问题