Почему Java-программа компилируется, но не запускается? - PullRequest
2 голосов
/ 13 февраля 2012

У меня есть класс с именем Employee с его 2 private переменными, а также содержит необходимые конструкторы и другие необходимые методы:

public class Employee {

    private String name;
    private int id;

    public Employee() {
        name = " No Name!";
        id = 00100;
    }

    public Employee(String n, int i) {
        name = n;
        id = i;
    }

    public Employee(Employee originalObject) {
        name = originalObject.name;
        id = originalObject.id;
    }

    public String getName() {
        return name;
    }

    public int getID() {
        return id;
    }

    public void setName(String newName) {
        if (newName == null) {
            System.out.println("Fatal Error setting employee name!");
            System.exit(0);
        } else {
            name = newName;
        }
    }

    public void setID(int newID) {
        id = newID;
    }

    public String toString() {
        return (name + " " + id);
    }

    public boolean equals(Employee otherEmployee) {
        return (name.equals(otherEmployee.name)
                && id == otherEmployee.id);
    }
}

Этот класс Employee расширяет другой класс с именем HourlyEmployee.Расширенный класс выглядит следующим образом:

public class HourlyEmployee extends Employee {

    private double wageRate;
    private double hours;

    public HourlyEmployee() {
        super();
        wageRate = 0;
        hours = 0;
    }

    public HourlyEmployee(String na, int di, double wR, double h) {
        super(na, di);
        if (wR >= 0 || h >= 0) {
            wageRate = wR;
            hours = h;
        } else {
            System.out.println("Fatal Error!: creating illegal hourly employee");
        }
        System.exit(0);
    }

    public HourlyEmployee(HourlyEmployee originalObject) {
        super(originalObject);
        wageRate = originalObject.wageRate;
        hours = originalObject.hours;
    }

    public double getRate() {
        return wageRate;
    }

    public double getHours() {
        return hours;
    }

    public double getPay() {
        return wageRate * hours;
    }

    public void setRate(double newWR) {
        if (newWR >= 0) {
            wageRate = newWR;
        } else {
            System.out.println("Fatal Error: negative hours worked!");
            System.exit(0);
        }
    }

    public String toString() {
        return (getName() + " " + getID() + "\n$" + wageRate + " per hour for " + hours + "hours");
    }
}

После того, как я закончил кодировать этот класс, я написал демонстрационный класс для тестирования этих классов и того, как он будет работать.

public class InheritanceDemo {

    public static void main(String[] args) {
        HourlyEmployee joe = new HourlyEmployee("Joe Worker", 281952, 50.50, 160);
        System.out.println("joe's longer name is " + joe.getName());
        System.out.println("Changing joe's name to joseph.");
        joe.setName("Joseph");
        System.out.println("joe's record is as follows: ");
        System.out.println(joe);
    }
}

Наконец, я попытался скомпилировать код, и это сработало, но, к сожалению, демонстрационный класс не запустился, хотя и показал мне, что «процесс завершен» на экране!Что вы думаете не так с этой программой?

Ответы [ 2 ]

5 голосов
/ 13 февраля 2012

Проблема с первым System.exit(0) в HourlyEmployee. Поскольку после этого else нет {}, выход выполняется безоговорочно.

3 голосов
/ 13 февраля 2012

В вашем конструкторе НЕ должно быть System.exit.

Вы также не должны выписывать сообщение об ошибке. Бросьте исключение IllegalArgumentException.

Ваш cour HourlyEmployee потерпел неудачу. Это то, что вы хотите:

public class HourlyEmployee extends Employee {

    private double wageRate;
    private double hours;

    public HourlyEmployee() {

        super();
        wageRate = 0;
        hours = 0;


    }

    public HourlyEmployee(String na, int di, double wR, double h) {

        super(na, di);
        if (wR < 0) throw new IllegalArgumentException("wage rate cannot be negative");
        if (h < 0) throw new IllegalAccessError("hours cannot be negative");
        wageRate = wR;
        hours = h;

    }

    public HourlyEmployee(HourlyEmployee originalObject) {

        super(originalObject);
        wageRate = originalObject.wageRate;
        hours = originalObject.hours;

    }

    public double getRate() {

        return wageRate;

    }

    public double getHours() {

        return hours;
    }

    public double getPay() {

        return wageRate * hours;

    }

    public void setRate(double newWR) {

        if (newWR < 0) throw new IllegalArgumentException("wage rate cannot be negative");
            wageRate = newWR;
    }

    public String toString() {

        return (getName() + " " + getID() + "\n$" + wageRate + " per hour for " + hours + "hours");
    }

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