Написание Назначение суперкласса с 3 подклассами и тестером.Все компилируется, но нет ответа от программы после ввода пользователя - PullRequest
0 голосов
/ 22 сентября 2019

Реализация Назначения суперкласса и подклассов Один раз, Ежедневно и Ежемесячно.Назначение встречи имеет описание (например, «посещение стоматолога») и происходит в один или несколько дней.Записать метод происходит на (int year, int month, int day), который проверяет, происходит ли встреча в эту дату.Например, для ежемесячной встречи вы должны проверить, совпадает ли день месяца.Затем заполните массив объектов назначений смесью назначений.Попросите пользователя ввести дату и распечатать все встречи, которые происходят в эту дату.

Должны быть уже созданы встречи, и вы просто запрашиваете у пользователей дату, чтобы проверить их.

Метод OccursOn внутри каждого из подклассов, который проверяет, происходит ли встреча на этомдата (OneTime), день (день) или месяц (месяц).Попросите пользователя ввести дату для проверки.На основании того, что выбрал пользователь, OccursOn внутри каждого подкласса должен запускаться и отображать любые подходящие встречи и связанные описания.Для подкласса OneTime OccursOn требуется три входа (год, месяц и день) для проверки, для подкласса дня OccursOn требуется один вход (день) для проверки, а для подкласса месяца OccursOn требуется один вход (месяц) для проверки.OccursOn отличается для разных подклассов.

С тестером все должно быть в порядке.Мне нужен суперкласс и подклассы, чтобы соответствовать классу тестера.Я не уверен, какая часть моего кода не совпадает.

Там может быть какой-то код, не связанный напрямую с текущей программой, так как я пробовал разные вещи, чтобы решить проблему без решения.

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]);
            }
        }
    }
 }

Нет текущих сообщений об ошибках.Программа просто не отвечает после ввода от пользователя.Спасибо за вашу помощь!

1 Ответ

1 голос
/ 22 сентября 2019

java.util.Scanner все еще ожидает полного ввода, поэтому ничего не происходит.(Спасибо @csabinho)

Хорошо, допустим, вы ввели любые три числа.Вы получите NullPointerException, потому что каждый Appointment объект в вашем массиве appointments[] имеет null day, month и year. Ни один из ваших конструкторов фактически не определяет ваши переменные.

...