Java 编写包含3个子类和tester的约会超类。用户输入后,所有内容都会编译,但程序没有响应

Java 编写包含3个子类和tester的约会超类。用户输入后,所有内容都会编译,但程序没有响应,java,inheritance,subclass,superclass,appointment,Java,Inheritance,Subclass,Superclass,Appointment,实现一次、每天和每月的超类预约和子类预约。预约有一个描述(例如,“看牙医”),发生在一个或多个日期。编写一个方法occursOn(int year、int month、int day),检查约会是否发生在该日期。例如,对于每月约会,必须检查该月的日期是否匹配。然后用约会的混合物填充约会对象数组。让用户输入日期并打印出该日期发生的所有约会 应该已经创建了约会,你只是简单地要求用户提供一个日期来核对他们 每个子类中都有一个方法,用于检查约会是否发生在该日期(一次性)、日期(天)或月份(月)。要求用户

实现一次、每天和每月的超类预约和子类预约。预约有一个描述(例如,“看牙医”),发生在一个或多个日期。编写一个方法occursOn(int year、int month、int day),检查约会是否发生在该日期。例如,对于每月约会,必须检查该月的日期是否匹配。然后用约会的混合物填充约会对象数组。让用户输入日期并打印出该日期发生的所有约会

应该已经创建了约会,你只是简单地要求用户提供一个日期来核对他们

每个子类中都有一个方法,用于检查约会是否发生在该日期(一次性)、日期(天)或月份(月)。要求用户输入要检查的日期。根据用户选择的内容,每个子类中的占用者应运行并显示任何匹配的约会和相关描述。对于一次性子类,占用人需要三个输入(年、月和日)进行验证;对于日子类,占用人需要一个输入(日)进行验证;对于月子类,占用人需要一个输入(月)进行验证。占用人对于不同的子类是不同的

测试仪应该没问题。我需要超类和子类来匹配tester类。我不确定我的代码的哪一部分不匹配

其中可能有一些代码与当前程序没有直接关系,因为我一直在尝试不同的方法来解决问题,但没有解决方案

public class Appointment{



    private int day;
    private int month;
    private int year;
    private String description;

    public int getDay()
    {
        return day;
    }

    /**
     * @param patientName sets patient name
     */
    public void setDay(int day)
    {
        this.day = day;
    }

     /**
     * 
     */
    public int getMonth()
    {
        return month;
    }

    /**
     * @param patientName sets patient name
     */
    public void setMonth(int month)
    {
        this.month = month;
    }

     /**
     * 
     */
    public int getYear()
    {
        return year;
    }

    /**
     * @param patientName sets patient name
     */
    public void setYear(int year)
    {
        this.year = year;
    }

    /**
     * 
    public String getDescription()
    {
        return description;
    }
    */

    /**
     * @param patientName sets patient name

    public void setDescription(String description)
    {
        this.description = description;
    }
    */

    boolean occursOn (int day, int month, int year)
    {
        if( (this.day == day) || (this.month == month) || (this.year == year))
            {
                return true;
            }
        else 
        {
            return false;
        }
    }

    /**
     Converts appointment to string description
     */
    public String toString()
    {
        return description;
    }
}




import java.util.ArrayList;

public class Daily extends Appointment{



    private ArrayList<Integer>daily;

    public Daily(int day, int month, int year, String description)
    {
        daily = new ArrayList<Integer>();
    }

    public boolean occursOn (int day)
    {
        daily.add(day);
        {
             String whatDay = "" + daily.size();
        }

        return true;
    }
}


import java.util.ArrayList;

public class Monthly extends Appointment{



    private ArrayList<Integer>monthly;

    public Monthly(int day, int month, int year, String description)
    {
        monthly = new ArrayList<Integer>();
    }

    public boolean occursOn (int month)
    {
        monthly.add(month);
        {
             String whatMonth = "" + monthly.size();
        }

        return true;
    }


import java.util.ArrayList;

public class OneTime extends Appointment{



    private ArrayList<Integer>oneTime;
    int oneAppointment;

    public OneTime(int day, int month, int year, String description)
    {
        oneTime = new ArrayList<Integer>();
    }

    public boolean occursOn (int day, int month, int year)
    {
        oneTime.add(oneAppointment);
        {
             String whatMonthDayYear = "" + oneTime.size();
        }

        return true;
    }


import java.util.Scanner;

public class AppointmentDemo{



    public static void main(String[] args){
        Appointment[] appointments = new Appointment [4];
        appointments[0] = new Daily (2, 10, 2018, "Brush your teeth.");
        appointments[1] = new Monthly (2, 10, 2018, "Brush your teeth.");
        appointments[2] = new OneTime (2, 10, 2018, "Brush your teeth.");

        System.out.println("Enter a date (month, day, year) to list" + "appointments: ");
        Scanner in = new Scanner(System.in);
        int month = in.nextInt();
        int day = in.nextInt();
        int year = in.nextInt();

        for (int i = 0; i < appointments.length; i++){
            if (appointments[i].occursOn(month, day, year)){
                System.out.println(appointments[i]);
            }
        }
    }
 }
公共课堂预约{
私人国际日;
私人整数月;
私人国际年;
私有字符串描述;
public int getDay()
{
回归日;
}
/**
*@param patientName设置患者姓名
*/
公共无效设定日(整数日)
{
this.day=天;
}
/**
* 
*/
公共整数getMonth()
{
返回月份;
}
/**
*@param patientName设置患者姓名
*/
公共无效设置月(整数月)
{
本月=月;
}
/**
* 
*/
公共int getYear()
{
回归年;
}
/**
*@param patientName设置患者姓名
*/
公共年(国际年)
{
今年=年;
}
/**
* 
公共字符串getDescription()
{
返回说明;
}
*/
/**
*@param patientName设置患者姓名
公共void集合描述(字符串描述)
{
this.description=描述;
}
*/
布尔占位符(整数天、整数月、整数年)
{
如果((this.day==day)| |(this.month==month)| | |(this.year==year))
{
返回true;
}
其他的
{
返回false;
}
}
/**
将约会转换为字符串描述
*/
公共字符串toString()
{
返回说明;
}
}
导入java.util.ArrayList;
公共课每日延长预约{
《私人ArrayListdaily》;
公共日报(整数天、整数月、整数年、字符串描述)
{
每日=新的ArrayList();
}
公共布尔占用人(整数日)
{
每日。添加(天);
{
字符串whatDay=“”+daily.size();
}
返回true;
}
}
导入java.util.ArrayList;
公营班级每月延长预约{
每周一次的私人庭审;
公共每月(整数天、整数月、整数年、字符串说明)
{
每月=新的ArrayList();
}
公共布尔占用人(整数月)
{
每月。添加(月);
{
字符串whatMonth=“”+monthly.size();
}
返回true;
}
导入java.util.ArrayList;
公共类一次性延长预约时间{
私人时间;
任命;
公共一次性(整数天、整数月、整数年、字符串描述)
{
oneTime=newarraylist();
}
公共布尔占用人(整数天、整数月、整数年)
{
一次性。添加(一次约会);
{
字符串whatMonthDayYear=“+oneTime.size();
}
返回true;
}
导入java.util.Scanner;
公开班级任命演示{
公共静态void main(字符串[]args){
任命[]任命=新任命[4];
预约[0]=新日报(2018年2月10日,“刷牙”);
预约[1]=新月刊(2018年2月10日,“刷牙”);
约会[2]=新的一次性(2018年2月10日,“刷牙”);
System.out.println(“输入日期(月、日、年)以列出“+”约会:”;
扫描仪输入=新扫描仪(系统输入);
int month=in.nextInt();
int day=in.nextInt();
int year=in.nextInt();
for(int i=0;i<0.length;i++){
if(任命[i].占用人(月、日、年)){
系统输出打印LN(预约[i]);
}
}
}
}

当前没有错误消息。用户输入后,程序不会响应。感谢您的帮助!

java.util.Scanner仍在等待完全输入,因此不会发生任何事情。(感谢@csabinho)


好的,假设您输入了任意三个数字。您将得到一个NullPointerException,因为
Appointment[]
数组中的每个
Appointment
对象都有一个
null
年。
没有一个构造函数实际定义您的变量。

Appointment[]约会=新约会[4];
在最后一段代码中:为什么有一个未使用的索引?是否输入了3个数字?下次,请尝试使用System.out.print()语句调试程序,以查找整个程序中的变量值。