链表和 Try/Catch
Linked Lists and Try/Catch
所以问题是:
Create a Employee class which cannot be instantiated and has the following fields:
• String name;
• String ppsNumber;
• int employeeNumber;
• int numberOfEmployees;
• protected double pay;
These data members are tracked using appropriate setter and getter methods. Hourly
employees are paid €15.00 per hour and commission based employees are paid 10% of the
value of their sales figure. In the class you are required to appropriately plan for a earnings
method (double earnings() and ensure that the method must be implemented in subclasses.
Create a HourlyEmployee class and a CommissionEmployee class that are derived from
Employee. In each of these classes, create an overridden method named earnings.
Finally, you are required to test your classes using a client class and to store the instances of
employees into a LinkedList, using try/catch blocks where appropriate.
我完成了大部分工作,只是卡在了它的末尾,我在其中的某个地方犯了一些错误,这里是:
public abstract class Employee {
//private instances
private String name;
private String ppsNumber;
private int employeeNumber;
private int numberOfEmployees;
protected double earnings;
protected double pay;
protected double sales;
//default constructor
public Employee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double pay, double sales) {
name = "Not Given";
ppsNumber = "Not Givwn";
employeeNumber = 0;
numberOfEmployees = 0;
earnings = 0;
pay = 0;
sales = 0;
}
//getters and setters
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getPPSNumber(){
return ppsNumber;
}
public void setPPSNumber(String ppsNumber){
this.ppsNumber = ppsNumber;
}
public int getEmployeeNumber(){
return employeeNumber;
}
public void setEmployeeNumber(int employeeNumber){
this.employeeNumber = employeeNumber;
}
public int getNumberOfEmployees(){
return numberOfEmployees;
}
public void setNumberOfEmployees(int numberOfEmployees){
this.numberOfEmployees = numberOfEmployees;
}
public double getPay(){
return pay;
}
public void setPay(double pay){
this.pay = pay;
}
public double getEarnings(){
return earnings;
}
public void setEarnings(double earnings){
this.earnings = earnings;
}
public double getSales(){
return sales;
}
public void setSales(double sales){
this.sales = sales;
}
//calculateEarnings method
abstract double calculateEarnings();
//toString method
@Override
public String toString(){
return name + ppsNumber + getEmployeeNumber();
}
}//end class
.
import java.util.Scanner;
public class HourlyEmployee extends Employee {
public HourlyEmployee(){
super();
}
//constructor
public HourlyEmployee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double pay){
super(name, ppsNumber, employeeNumber, numberOfEmployees, earnings, pay, pay);
}
//calculate earnings method
@Override
double calculateEarnings() {
//input hours worked to calculate earnings
Scanner input = new Scanner(System.in);
System.out.println("Enter Hours Worked: ");
pay = input.nextDouble();
//calculate earnings
earnings = pay * 15;
System.out.println("Employee's Earnings: " + earnings);
return earnings;
}//end method
}//end class
.
import java.util.Scanner;
public class CommissionEmployee extends Employee {
public CommissionEmployee(){
super();
}
//constructor
public CommissionEmployee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double sales){
super(name, ppsNumber, employeeNumber, numberOfEmployees, earnings, sales, sales);
}
//calculate earnings methods
@Override
double calculateEarnings() {
//input sales value to calculate earnings
Scanner input = new Scanner(System.in);
System.out.println("Enter Sales Value: ");
sales = input.nextDouble();
//calculate earnings
earnings = sales * 0.1;
System.out.println("Employee's Earnings: " + earnings);
return earnings;
}//end method
}//end class
.
import java.util.LinkedList;
import java.util.Scanner;
import java.util.List;
import java.lang.ArrayIndexOutOfBoundsException;
import java.util.InputMismatchException;
public class EmployeeTester {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int numberOfEmployees = 0;
while (numberOfEmployees == 0){
try{
System.out.print("Enter Number of Employees: ");
numberOfEmployees = input.nextInt();
} catch (InputMismatchException e) {
System.out.println("Exception Thrown " + e);
}
input.nextLine();//clears input
}//end while
Employee[] employees = new Employee[numberOfEmployees];
//create linked list
List<Employee> employeeList = new LinkedList<Employee>();
//declare & create an HourlyEmployee
employeeList.add(new HourlyEmployee());
for(int i=0; i<employees.length; i++){
String name;
String ppsNumber;
int employeeNumber;
int x = 0;
System.out.print("Name: ");
name = input.next();
System.out.print("PPS Number: ");
ppsNumber = input.next();
System.out.print("Employee Number: ");
employeeNumber = input.nextInt();
employeeList.get(x).setName(name);
x++; //increment x
try{//if not using length to control loop
employees[i].setName(name);
employees[i].setPPSNumber(ppsNumber);
employees[i].setEmployeeNumber(employeeNumber);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Array Index Out of Bounds");
}
}//end for
//enhanced for loop
for(Employee element:employees){
System.out.println(element.toString());
System.out.println(element.calculateEarnings());
}
//declare & create an CommissionEmployee
employeeList.add(new CommissionEmployee());
for(int i=0; i<employees.length; i++){
String name;
String ppsNumber;
int employeeNumber;
int x = 0;
System.out.print("Name: ");
name = input.next();
System.out.print("PPS Number: ");
ppsNumber = input.next();
System.out.print("Employee Number: ");
employeeNumber = input.nextInt();
employeeList.get(x).setName(name);
x++; //increment x
try{//if not using length to control loop
employees[i].setName(name);
employees[i].setPPSNumber(ppsNumber);
employees[i].setEmployeeNumber(employeeNumber);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Array Index Out of Bounds");
}
}//end for
//enhanced for loop
for(Employee element:employees){
System.out.println(element.toString());
System.out.println(element.calculateEarnings());
}
}//end main()
}//end class
所以最初我的问题是当我 运行 代码询问有多少员工并询问姓名、pps 编号和员工编号时,我得到错误:
Exception in thread "main" java.lang.NullPointerException
at EmployeeTester.main(EmployeeTester.java:54)
然后我意识到我忘记为 hourlyemployees 和 commissionemployees 添加构造函数,所以我去做了,现在超级 class:
public class HourlyEmployee extends Employee {
public HourlyEmployee(){
super();
}
错误显示
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The constructor Employee() is undefined
at HourlyEmployee.<init>(HourlyEmployee.java:5)
at EmployeeTester.main(EmployeeTester.java:31)
我仍然遇到第一个问题,如果有人可以帮助我修复它并再次获取代码 运行 那就太好了,在此先感谢
我注意到的一些问题(假设这是第 54 行):
try{//if not using length to control loop
employees[i].setName(name);
employees[i].setPPSNumber(ppsNumber);
employees[i].setEmployeeNumber(employeeNumber);
}
在此代码中,您假设存储在 employees
数组中的对象已初始化,但事实并非如此。你需要做这样的事情
try{//if not using length to control loop
employees[i] = new HourlyEmployee(); //or some other employee.
employees[i].setName(name);
employees[i].setPPSNumber(ppsNumber);
employees[i].setEmployeeNumber(employeeNumber);
}
其次,此错误:Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The constructor Employee() is undefined
暗示 Employee
class 没有无参数构造函数。在 Java 中,默认情况下每个对象都有一个无参数的构造函数,但是当您提供自己的构造函数时,它会被删除。
因此,您需要在 Employee
class.
中创建一个新的无参数构造函数
编辑:作为旁注,虽然展示您尝试过的内容很好,但请不要在以后提出问题时提供所有代码,而应仅提供相关内容并补充一些显示的代码问题。
在这里,您使用参数调用 "father" 的构造函数:
public HourlyEmployee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double pay){
super(name, ppsNumber, employeeNumber, numberOfEmployees, earnings, pay, pay);
}
这很好,因为您已经定义了它:
public Employee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double pay, double sales) {
name = "Not Given";
ppsNumber = "Not Givwn";
employeeNumber = 0;
numberOfEmployees = 0;
earnings = 0;
pay = 0;
sales = 0;
}
但是你在这里调用你的 "fathers" 构造函数没有参数,它没有在任何地方定义:
public HourlyEmployee(){
super();
}
这正是错误消息告诉您的内容。
您(很可能)真正想要的是以下内容:
public Employee() {
//note that in your code you didn't used the parameters anyway
name = "Not Given";
ppsNumber = "Not Givwn";
employeeNumber = 0;
numberOfEmployees = 0;
earnings = 0;
pay = 0;
sales = 0;
}
public Employee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double pay, double sales) {
this.name = name;
this.ppsNumber = ppsNumber;
this.employeeNumber = employeeNumber;
this.numberOfEmployees = numberOfEmployees;
this.earnings = earnings;
this.pay = pay;
this.sales = sales;
}
所以问题是:
Create a Employee class which cannot be instantiated and has the following fields:
• String name;
• String ppsNumber;
• int employeeNumber;
• int numberOfEmployees;
• protected double pay;
These data members are tracked using appropriate setter and getter methods. Hourly
employees are paid €15.00 per hour and commission based employees are paid 10% of the
value of their sales figure. In the class you are required to appropriately plan for a earnings
method (double earnings() and ensure that the method must be implemented in subclasses.
Create a HourlyEmployee class and a CommissionEmployee class that are derived from
Employee. In each of these classes, create an overridden method named earnings.
Finally, you are required to test your classes using a client class and to store the instances of
employees into a LinkedList, using try/catch blocks where appropriate.
我完成了大部分工作,只是卡在了它的末尾,我在其中的某个地方犯了一些错误,这里是:
public abstract class Employee {
//private instances
private String name;
private String ppsNumber;
private int employeeNumber;
private int numberOfEmployees;
protected double earnings;
protected double pay;
protected double sales;
//default constructor
public Employee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double pay, double sales) {
name = "Not Given";
ppsNumber = "Not Givwn";
employeeNumber = 0;
numberOfEmployees = 0;
earnings = 0;
pay = 0;
sales = 0;
}
//getters and setters
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getPPSNumber(){
return ppsNumber;
}
public void setPPSNumber(String ppsNumber){
this.ppsNumber = ppsNumber;
}
public int getEmployeeNumber(){
return employeeNumber;
}
public void setEmployeeNumber(int employeeNumber){
this.employeeNumber = employeeNumber;
}
public int getNumberOfEmployees(){
return numberOfEmployees;
}
public void setNumberOfEmployees(int numberOfEmployees){
this.numberOfEmployees = numberOfEmployees;
}
public double getPay(){
return pay;
}
public void setPay(double pay){
this.pay = pay;
}
public double getEarnings(){
return earnings;
}
public void setEarnings(double earnings){
this.earnings = earnings;
}
public double getSales(){
return sales;
}
public void setSales(double sales){
this.sales = sales;
}
//calculateEarnings method
abstract double calculateEarnings();
//toString method
@Override
public String toString(){
return name + ppsNumber + getEmployeeNumber();
}
}//end class
.
import java.util.Scanner;
public class HourlyEmployee extends Employee {
public HourlyEmployee(){
super();
}
//constructor
public HourlyEmployee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double pay){
super(name, ppsNumber, employeeNumber, numberOfEmployees, earnings, pay, pay);
}
//calculate earnings method
@Override
double calculateEarnings() {
//input hours worked to calculate earnings
Scanner input = new Scanner(System.in);
System.out.println("Enter Hours Worked: ");
pay = input.nextDouble();
//calculate earnings
earnings = pay * 15;
System.out.println("Employee's Earnings: " + earnings);
return earnings;
}//end method
}//end class
.
import java.util.Scanner;
public class CommissionEmployee extends Employee {
public CommissionEmployee(){
super();
}
//constructor
public CommissionEmployee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double sales){
super(name, ppsNumber, employeeNumber, numberOfEmployees, earnings, sales, sales);
}
//calculate earnings methods
@Override
double calculateEarnings() {
//input sales value to calculate earnings
Scanner input = new Scanner(System.in);
System.out.println("Enter Sales Value: ");
sales = input.nextDouble();
//calculate earnings
earnings = sales * 0.1;
System.out.println("Employee's Earnings: " + earnings);
return earnings;
}//end method
}//end class
.
import java.util.LinkedList;
import java.util.Scanner;
import java.util.List;
import java.lang.ArrayIndexOutOfBoundsException;
import java.util.InputMismatchException;
public class EmployeeTester {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int numberOfEmployees = 0;
while (numberOfEmployees == 0){
try{
System.out.print("Enter Number of Employees: ");
numberOfEmployees = input.nextInt();
} catch (InputMismatchException e) {
System.out.println("Exception Thrown " + e);
}
input.nextLine();//clears input
}//end while
Employee[] employees = new Employee[numberOfEmployees];
//create linked list
List<Employee> employeeList = new LinkedList<Employee>();
//declare & create an HourlyEmployee
employeeList.add(new HourlyEmployee());
for(int i=0; i<employees.length; i++){
String name;
String ppsNumber;
int employeeNumber;
int x = 0;
System.out.print("Name: ");
name = input.next();
System.out.print("PPS Number: ");
ppsNumber = input.next();
System.out.print("Employee Number: ");
employeeNumber = input.nextInt();
employeeList.get(x).setName(name);
x++; //increment x
try{//if not using length to control loop
employees[i].setName(name);
employees[i].setPPSNumber(ppsNumber);
employees[i].setEmployeeNumber(employeeNumber);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Array Index Out of Bounds");
}
}//end for
//enhanced for loop
for(Employee element:employees){
System.out.println(element.toString());
System.out.println(element.calculateEarnings());
}
//declare & create an CommissionEmployee
employeeList.add(new CommissionEmployee());
for(int i=0; i<employees.length; i++){
String name;
String ppsNumber;
int employeeNumber;
int x = 0;
System.out.print("Name: ");
name = input.next();
System.out.print("PPS Number: ");
ppsNumber = input.next();
System.out.print("Employee Number: ");
employeeNumber = input.nextInt();
employeeList.get(x).setName(name);
x++; //increment x
try{//if not using length to control loop
employees[i].setName(name);
employees[i].setPPSNumber(ppsNumber);
employees[i].setEmployeeNumber(employeeNumber);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Array Index Out of Bounds");
}
}//end for
//enhanced for loop
for(Employee element:employees){
System.out.println(element.toString());
System.out.println(element.calculateEarnings());
}
}//end main()
}//end class
所以最初我的问题是当我 运行 代码询问有多少员工并询问姓名、pps 编号和员工编号时,我得到错误:
Exception in thread "main" java.lang.NullPointerException
at EmployeeTester.main(EmployeeTester.java:54)
然后我意识到我忘记为 hourlyemployees 和 commissionemployees 添加构造函数,所以我去做了,现在超级 class:
public class HourlyEmployee extends Employee {
public HourlyEmployee(){
super();
}
错误显示
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The constructor Employee() is undefined
at HourlyEmployee.<init>(HourlyEmployee.java:5)
at EmployeeTester.main(EmployeeTester.java:31)
我仍然遇到第一个问题,如果有人可以帮助我修复它并再次获取代码 运行 那就太好了,在此先感谢
我注意到的一些问题(假设这是第 54 行):
try{//if not using length to control loop
employees[i].setName(name);
employees[i].setPPSNumber(ppsNumber);
employees[i].setEmployeeNumber(employeeNumber);
}
在此代码中,您假设存储在 employees
数组中的对象已初始化,但事实并非如此。你需要做这样的事情
try{//if not using length to control loop
employees[i] = new HourlyEmployee(); //or some other employee.
employees[i].setName(name);
employees[i].setPPSNumber(ppsNumber);
employees[i].setEmployeeNumber(employeeNumber);
}
其次,此错误:Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The constructor Employee() is undefined
暗示 Employee
class 没有无参数构造函数。在 Java 中,默认情况下每个对象都有一个无参数的构造函数,但是当您提供自己的构造函数时,它会被删除。
因此,您需要在 Employee
class.
编辑:作为旁注,虽然展示您尝试过的内容很好,但请不要在以后提出问题时提供所有代码,而应仅提供相关内容并补充一些显示的代码问题。
在这里,您使用参数调用 "father" 的构造函数:
public HourlyEmployee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double pay){
super(name, ppsNumber, employeeNumber, numberOfEmployees, earnings, pay, pay);
}
这很好,因为您已经定义了它:
public Employee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double pay, double sales) {
name = "Not Given";
ppsNumber = "Not Givwn";
employeeNumber = 0;
numberOfEmployees = 0;
earnings = 0;
pay = 0;
sales = 0;
}
但是你在这里调用你的 "fathers" 构造函数没有参数,它没有在任何地方定义:
public HourlyEmployee(){
super();
}
这正是错误消息告诉您的内容。
您(很可能)真正想要的是以下内容:
public Employee() {
//note that in your code you didn't used the parameters anyway
name = "Not Given";
ppsNumber = "Not Givwn";
employeeNumber = 0;
numberOfEmployees = 0;
earnings = 0;
pay = 0;
sales = 0;
}
public Employee(String name, String ppsNumber, int employeeNumber, int numberOfEmployees, double earnings, double pay, double sales) {
this.name = name;
this.ppsNumber = ppsNumber;
this.employeeNumber = employeeNumber;
this.numberOfEmployees = numberOfEmployees;
this.earnings = earnings;
this.pay = pay;
this.sales = sales;
}