2015-11-07 94 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; 
         } 
    
相關問題