2012-10-06 94 views
1

這是一個家庭作業問題。我已經晚了5天,想不通我做錯了什麼。這是我在Java的第一學期,我的這個網站爲什麼我的主課不能在我的日曆類中看到數組

這裏是分配的第一篇文章..

創建一個叫Calendar的類。該類應該包含一個名爲events的變量,它是一個字符串數組。數組應該被創建以保存5個元素。使用一個常數值來指定數組大小。不要硬編碼數組大小。在類構造函數中初始化數組,以便每個元素包含字符串「 - 沒有計劃的事件 - 」

該類應包含一個名爲CreateEvent的方法。該方法應接受一個String參數,該參數包含一個單詞用戶事件和一個表示星期幾的整數參數。 Monday應該用數字1代表,而Friday應該用數字5代表。使用傳遞給方法的事件信息填充事件數組。雖然用戶意願輸入一個字的事件,每個事件串應當預先考慮下面的字符串與每個事件:

event_dayAppoinment: (where event_day is the day of the week) 

例如,如果用戶輸入1和「醫生」,第一個數組元素應改爲: 週一預約:醫生

如果用戶輸入2和「PTA」,第二個數組元素應改爲: 週二任命:PTA

寫驅動程序(在一個單獨的類)創建並調用您的日曆類。然後使用循環來收集用戶輸入。詢問當天(作爲一個整數),然後詢問事件(作爲一個單詞字符串)。將整數和字符串傳遞給Calendar對象的CreateEvent方法。用戶應該能夠輸入0-5個事件。如果用戶輸入-1,循環應該退出並且您的應用程序應該以表格格式打印出所有事件。您的程序不應允許用戶在一週中的某天輸入無效值。除了每週的1 – 5-1以外的任何輸入都將被視爲無效。

備註: 從用戶獲取整數時,您需要在掃描儀對象上使用nextInt()方法。從用戶獲取字符串時,您需要在掃描儀對象上使用next()方法。

這是到目前爲止我的代碼..

//DRIVER CLASS 

/** 
* 
* @author Rocky 
*/ 

//imports scanner 
import java.util.Scanner; 

//begin class driver  
public class driver { 

    /** 
    * @paramargs the command line arguments 
    */ 
    //begin main method 
    public static void main(String[] args) { 
     //initiates scanner 
     Scanner userInput = new Scanner (System.in); 

     //declare variables 
     int dayOfWeek; 
     String userEvent; 

     //creates object for calender class 
     calendercalenderObject = new calender(); 

     //user prompt 
     System.out.println("Enter day of week for your event in the following format:"); 
     System.out.println("Enter 1 for Monday"); 
     System.out.println("Enter 2 for Tuesday"); 
     System.out.println("Enter 3 for Wednsday"); 
     System.out.println("Enter 4 for Thursday"); 
     System.out.println("Enter 5 for Friday"); 
     System.out.println("Enter -1 to quit"); 

     //collect user input 
     dayOfWeek = userInput.nextInt(); 

     //user prompt 
     System.out.println("Please type in the name of your event"); 

     //collect user input 
     userEvent = userInput.next(); 

     //begin while loop 
     while (dayOfWeek != -1) { 
      //test for valid day of week 
      if ((dayOfWeek>=1) && (dayOfWeek<=5)){ 
       //calls createEvent method in calender class and passes 2 variables 
       calenderObject.createEvent(userEvent,dayOfWeek); 
      } else { 
       //error message 
       System.out.println("You have entered an invalid number"); 

       //user prompts 
       System.out.println("Press -1 to quit or enter another day"); 
       System.out.println("Enter 1 for Monday"); 
       System.out.println("Enter 2 for Tuesday"); 
       System.out.println("Enter 3 for Wednsday"); 
       System.out.println("Enter 4 for Thursday"); 
       System.out.println("Enter 5 for Friday"); 
       System.out.println("Enter -1 to quit"); 

       //collect user input 
       dayOfWeek = userInput.nextInt(); 

       //end data validity test 
      } 
      //end while loop 
     } 


     //prints array to screen 
     int i=0; 

     for (i=0;i<events.length;i++){ 
      System.out.println(events[i]); 
     } 
     //end main method 
    } 
} 


/** 
* 
* @author Rocky 
*/ 

//imports scanner 
import java.util.Scanner; 


//begin calender class 
public class calender { 

    //creates events array 
    String[] events = new String[5]; 

    //begin calender class constructor 
    public calender() { 
     //Initializes array 
     String[] events = {"-No event planned-","-No event planned-","-No event planned-","-No event planned-","-No event planned-"}; 
     //end calender class constructor 
} 

    //begin createEvent method 
    public String[] createEvent (String userEvent, int dayOfWeek){ 
     //Start switch test 
     switch (dayOfWeek){ 
      case 1: 
       events[0] = ("Monday Appoinment:") + userEvent; 
       break; 
      case 2: 
       events[1] = ("Tuesday Appoinment:") + userEvent; 
       break; 
      case 3: 
       events[2] = ("WednsdayAppoinment:") + userEvent; 
       break; 
      case 4: 
       events[3] = ("Thursday Appoinment:") + userEvent; 
       break; 
      case 5: 
       events[4] = ("Friday Appoinment:") + userEvent; 
       break; 
      default: 
       break; 
       //End switch test 
     } 
     //returns events array 
     return events; 
     //end create event method 
    } 
    //end calender class  
} 
+0

小樣式評論:類名應該大寫。 ''驅動程序'不''驅動程序','日曆'不''日曆'等 –

+1

'我已經晚了5天,無法弄清楚我做錯了什麼 - - 見墨菲定律...然後,看到墨菲定律... – Coffee

回答

-1
import java.util.Scanner; 

//begin class driver  
public class driver { 

/** 
* @paramargs the command line arguments 
*/ 
//begin main method 
    public static void main(String[] args) { 
    //initiates scanner 
     Scanner userInput = new Scanner (System.in); 

    //declare variables 
    int dayOfWeek; 
    String userEvent; 

    //creates object for calender class 
    calender calenderObject = new calender(); 
    calender.fillArray(); 

    //user prompt 
    System.out.println("Enter day of week for your event in the following format:"); 
    System.out.println("Enter 1 for Monday"); 
    System.out.println("Enter 2 for Tuesday"); 
    System.out.println("Enter 3 for Wednsday"); 
    System.out.println("Enter 4 for Thursday"); 
    System.out.println("Enter 5 for Friday"); 
    System.out.println("Enter -1 to quit"); 

    //collect user input 
    dayOfWeek = userInput.nextInt(); 

    //user prompt 
    System.out.println("Please type in the name of your event"); 

    //collect user input 
    userEvent = userInput.next(); 

    //begin while loop 
    while (dayOfWeek != -1) { 
     if ((dayOfWeek>=1) && (dayOfWeek<=5)){ 
      calenderObject.createEvent(dayOfWeek, userEvent,dayOfWeek); 
      for (int i=0;i<calender.length;i++){ 
       System.out.println(calender.events[i]); 
      } 
      dayOfWeek = userInput.nextInt(); 

      if (dayOfWeek == -1){ 
       for (int i=0;i<calender.length;i++){ 
        System.out.println(calender.events[i]); 
       } 
       System.exit(0); 
      } 
      System.out.println("Please type in the name of your event");  
      userEvent = userInput.next(); 
     } else{ 
      System.out.println("You have entered an invalid number"); 
      System.out.println("Press -1 to quit or enter another day"); 
      System.out.println("Enter 1 for Monday"); 
      System.out.println("Enter 2 for Tuesday"); 
      System.out.println("Enter 3 for Wednsday"); 
      System.out.println("Enter 4 for Thursday"); 
      System.out.println("Enter 5 for Friday"); 
      System.out.println("Enter -1 to quit"); 
      dayOfWeek = userInput.nextInt(); 
     } 
    } 

    //end main method 
} 

}

//begin calender class 
public class calender { 

    static int length = 5; 
    static String[] events = new String[length]; 

    public static String[] fillArray(){ 
     for (int i=0; i< length;i++){ 
      events[i] = "-No event planned-"; 
     } 
     return events; 
    } 

    //begin createEvent method 
public String[] createEvent(int l, String userEvent, int dayOfWeek){ 
    int t = l; 
     if(t%5 == 1){ 
      events[0] = ("Monday Appoinment: ") + userEvent; 
     } else if(t%5 == 2){ 
      events[1] = ("Tuesday Appoinment: ") + userEvent; 
     } else if(t%5 == 3){ 
      events[2] = ("WednsdayAppoinment: ") + userEvent; 
     } else if(t%5 == 4){ 
      events[3] = ("Thursday Appoinment: ") + userEvent; 
     } else if(t%5 == 0){ 
      events[4] = ("Friday Appoinment: ") + userEvent; 
     }   
     return events; 
    } 

//end calender class  
} 
+2

你永遠循環這是主要問題 – dave

+0

非常感謝你 –

+0

我認爲失去日曆班不符合作業中給出的規範。我沒有投票表決(我沒有投票太多),但我猜測這可能是原因。另外@Rocky:在SO上,你可以通過upvoting來感謝他人,如果dave在這裏的答案對他有幫助,那麼可以給他一個upvote(你可以贊成和接受)。 –

1

首先,它說不要硬編碼的大小,使用恆定。因此,讓一個常數,像這樣:

private static final int ARRAY_SIZE = 5; 

,改變你的聲明

String[] events = new String[ARRAY_SIZE]; 

和初始化您的數組時,使用了計數器循環設置每個槽被「個事件planned- 「,而不僅僅是{一些」無事件計劃「),因爲這不是動態的,並且不會隨着你的常量大小而改變。

此外,在構造函數中刪除類型聲明

String[] events - >events

通過聲明的類型,你犯了一個新的局部變量,而不是修改字段,所以槽陣列中都是空的,因爲你從來沒有修改它們,而是在這個局部變量中的字段。

+0

雖然這裏的建議是健全的,但它根本不回答這個問題。 –

+0

@JoãoMendes我不認爲我什至可以看到任何問題......「並且無法弄清楚我做錯了什麼」我指出他做錯了什麼=回答那裏唯一真實的問題 –

+0

不,檢查標題的問題。 –

2

你的主要方法不知道events是什麼,因爲有一個名爲範圍的事件沒有局部變量,並沒有名爲主類事件的靜態變量。你需要告訴它你要尋找的事件特定日曆對象中的對象,像這樣:

System.out.println(calendarObject.events[0]); 

這裏假設你的兩個類都在同一個包,或者這兩者都已經沒有包聲明(所以他們都在默認包中)。如果兩個類位於不同的包中,則必須將實例成員公開,或者創建一個公共方法訪問它以供其他人查看。

基於類的對象的想法是,你可以使用一個類來創建多個對象。由於您只創建日曆類的一個對象,因此在此作業中可能會遇到這種情況。爲了引用對象的成員,您需要指定要在其中查找該成員的對象。

+0

這會編譯? 'events'似乎是私人的。 –

+0

João:它是封裝私有的。將不會獲得任何最佳實踐獎,但應該編譯。 –

+0

@JoãoMendes你看過我的......嗎? –

0

您在聲明中構造函數,因此默認值No event planned本地events陣列未分配給您的實例變量events應該

public calender() { 
    //Initializes your events array 

    events = { "-No event planned-", 
       "-No event planned-", 
       "-No event planned-", 
       "-No event planned-", 
       "-No event planned-"}; 

    //end calender class constructor 
} 

希望工程

+0

非常感謝你! –

相關問題