java - 为什么我的主类看不到日历类中的数组

标签 java

这是一道家庭作业问题。我已经晚了 5 天,不知道自己做错了什么。这是我学习 Java 的第一个学期,也是我在这个网站上的第一篇文章

这是作业..

创建一个名为Calendar的类。该类应包含一个名为 events 的变量,它是一个字符串数组。应创建该数组以容纳 5 个元素。使用常量值指定数组大小。不要对数组大小进行硬编码。在类构造函数中初始化数组,使每个元素包含字符串 “– No event planed – “

该类应包含一个名为 CreateEvent 的方法。此方法应接受一个包含单字用户事件的字符串参数和一个表示星期几的整数参数。 星期一 应由数字1 表示,星期五 应由数字5 表示。使用传递到方法中的事件信息填充事件数组。尽管用户将输入单字事件,但每个事件字符串都应在每个事件前面添加以下字符串:

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

例如,如果用户输入 1 和“doctor”,第一个数组元素应为: 周一预约:医生

如果用户输入 2 和“PTA”,第二个数组元素应为: 周二预约:PTA

编写一个驱动程序(在单独的类中)来创建并调用您的 Calendar 类。然后使用循环来收集用户输入。询问日期(作为整数),然后询问事件(作为单字字符串)。将整数和字符串传递给 Calendar 对象的 CreateEvent 方法。用户应该能够输入 0 – 5 个事件。如果用户输入 -1,则循环应退出,并且您的应用程序应以表格格式打印出所有事件。您的程序不应允许用户输入星期几的无效值。除表示星期几的 1 – 5-1 之外的任何输入都将被视为无效。

注释: 从用户处获取整数时,您需要在 Scanner 对象上使用 nextInt() 方法。从用户处获取字符串时,您需要在 Scanner 对象上使用 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    
}

最佳答案

您的 main 方法不知道 events 是什么,因为作用域中没有名为 events 的局部变量,并且主类上没有名为 events 的静态变量。您需要告诉它您正在寻找特定日历对象中的事件对象,如下所示:

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

这假设您的两个类位于同一个包中,或者两者都没有声明包(因此它们都位于默认包中)。如果这两个类位于不同的包中,则必须将实例成员公开为公共(public),或者创建一个公共(public)方法来访问它,以便另一个类可以看到它。

基于类的对象的想法是您可以使用一个类来创建多个对象。这在本次作业中可能不会很好地体现出来,因为您只创建了日历类的一个对象。为了引用对象的成员,您需要指定要在哪个对象中查找该成员。

关于java - 为什么我的主类看不到日历类中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12760751/

相关文章:

java - 更改 Joda 现有 DateTime 实例的日期时间格式

java - 在Java中绕过子类中的final方法?

java - 在Andengine中创建物理体时出现奇怪的错误

java - LMAX 颠覆器如何用于股票市场?

java - 通过 TestNG 和 Eclipse 运行 Webdriver 时出现参数 BROWSER 丢失错误

java - JVM 在桌面 Libgdx 应用程序中因非法指令而崩溃

java - 使用 RandomAccessFile 编写学生数组时遇到问题

java - (Gradle) 为新源集运行 testNG 测试任务时出现 ClassNotFoundException

java - 创建用户提示并模拟交互

java - Spring boot中的执行流程