2012-10-06 50 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

非常感谢你! –

相关问题