Reputation: 729
The program is meant to take in user input info and store it in a arraylist employee object. I'm not exactly sure why these errors are here. Any help?
Code:
import java.util.*;
import java.io.*;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
public class P
{
//Instance Variables
private static String empName;
private static String wage;
private static double wages;
private static double salary;
private static int numHours;
private static double increase;
// static ArrayList<String> ARempName = new ArrayList<String>();
// static ArrayList<Double> ARwages = new ArrayList<Double>();
// static ArrayList<Double> ARsalary = new ArrayList<Double>();
static ArrayList<Employee> emp = new ArrayList<Employee>();
public static void main(String[] args) throws Exception
{
Employee emp1 = new Employee("", 0);
clearScreen();
printMenu();
question();
exit();
}
public static void printArrayList(ArrayList<Employee> emp)
{
for (int i = 0; i < emp.size(); i++){
System.out.println(emp.get(i));
}
}
public static void clearScreen()
{
System.out.println("\u001b[H\u001b[2J");
}
private static void exit()
{
System.exit(0);
}
private static void printMenu()
{
System.out.println("\t------------------------------------");
System.out.println("\t|Commands: n - New employee |");
System.out.println("\t| c - Compute paychecks |");
System.out.println("\t| r - Raise wages |");
System.out.println("\t| p - Print records |");
System.out.println("\t| d - Download data |");
System.out.println("\t| u - Upload data |");
System.out.println("\t| q - Quit |");
System.out.println("\t------------------------------------");
System.out.println("");
}
private static void question()
{
System.out.print("Enter command: ");
Scanner q = new Scanner(System.in);
String input = q.nextLine();
input.replaceAll("\\s","").toLowerCase();
boolean valid = (input.equals("n") || input.equals("c") || input.equals("r") || input.equals("p") || input.equals("d") || input.equals("u") || input.equals("q"));
if (!valid){
System.out.println("Command was not recognized; please try again.");
printMenu();
question();
}
else if (input.equals("n")){
System.out.print("Enter the name of new employee: ");
Scanner stdin = new Scanner(System.in);
empName = stdin.nextLine();
emp1.setName(empName);
System.out.print("Hourly (h) or salaried (s): ");
Scanner stdin2 = new Scanner(System.in);
wage = stdin2.nextLine();
wage.replaceAll("\\s","").toLowerCase();
if (!(wage.equals("h") || wage.equals("s"))){
System.out.println("Input was not h or s; please try again");
}
else if (wage.equals("h")){
System.out.print("Enter hourly wage: ");
Scanner stdin4 = new Scanner(System.in);
wages = stdin4.nextDouble();
emp1.setWage(wages);
printMenu();
question();}
else if (wage.equals("s")){
System.out.print("Enter annual salary: ");
Scanner stdin5 = new Scanner(System.in);
salary = stdin5.nextDouble();
emp1.setWage(salary);
printMenu();
question();}}
else if (input.equals("c")){
System.out.print ("Enter number of hours worked by " + empName);
Scanner stdin = new Scanner(System.in);
numHours = stdin.nextInt();
System.out.println("Pay: ");
System.out.print("Enter number of hours worked by " + empName);
Scanner stdin2 = new Scanner(System.in);
numHours = stdin2.nextInt();
System.out.println("Pay: ");
printMenu();
question();}
else if (input.equals("r")){
System.out.print("Enter percentage increase: ");
Scanner stdin = new Scanner(System.in);
increase = stdin.nextDouble();
System.out.println("\nNew Wages");
System.out.println("---------");
// System.out.println(Employee.toString());
printMenu();
question();
}
else if (input.equals("p")){
printArrayList(emp);
printMenu();
question();
}
else if (input.equals("q")){
exit();
}
}
public abstract class Employee {
private String name;
private double wage;
protected Employee(String name, double wage){
this.name = name;
this.wage = wage;
}
public String getName() {
return name;
}
public double getWage() {
return wage;
}
public void setName(String name) {
this.name = name;
}
public void setWage(double wage) {
this.wage = wage;
}
public void percent(double wage, double percent) {
wage *= percent;
}
}
public class HourlyEmployee extends Employee {
//Instance Variables
public String result;
public HourlyEmployee(String name, double wage){
super(name, wage);
}
public void computePay(double wage){
if (numHours <= 40){
wage *= numHours;}
else {
wage = numHours * (1.5 * wage);}
}
/* public void toString(){
System.out.println("Name: " + name);
}*/
}
public class SalariedEmployee extends Employee {
//Instance Variables
private double salary;
private int salHours = 2080;
public SalariedEmployee(String name, double wage){
super(name, wage);
}
public void computePay(double wage){
salary = (salHours * salary) / 52;}
public double getSalary(){
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
/* public void toString(){
System.out.print("Name: " name + getSalary() + "/year");
}*/
}
}
Error:
javac P.java
P.java:24: non-static variable this cannot be referenced from a static context
Employee emp1 = new Employee("", 0);
^
P.java:82: cannot find symbol
symbol : variable emp1
location: class P
emp1.setName(empName);
^
P.java:94: cannot find symbol
symbol : variable emp1
location: class P
emp1.setWage(wages);
^
P.java:101: cannot find symbol
symbol : variable emp1
location: class P
emp1.setWage(salary);
^
4 errors
Any hints to point me in the right direction would be more than appreciated!
Upvotes: 0
Views: 1293
Reputation: 3876
Your code is easy to fix:
You have to replace:
public abstract class Employee {}
with
public static class Employee {}
abstract classes cannot be instantiated, plus I think you mean the employee class to be static.
Then, move
final Employee emp1 = new Employee("", 0);
into:
private static void question() {}
as emp1 is only used in that function and it would not otherwise be visible (it is "out of scope") or, as an alternative, declare it as a global variable.
Upvotes: 0
Reputation: 298898
non-static variable this cannot be referenced from a static context
Employee
is a non-static inner class and as such it must have an enclosing instance of the outer class. Hence you can't create an Employee
without a P
The mechanism is explained in the Java Tutorial > Nested Classes
Change this line:
public abstract class Employee {
to
public static abstract class Employee {
and it should work (you'll have to change the different Employee subtypes as well)
Upvotes: 0
Reputation: 725
You cannot instantiate an abstract class, also emp1 isnt locally initialized .. prolly because you cant instantiate an object to a abstract..
Employee emp1 = HiredEmployee("", 0) or SalaryEmployee("", 0);
Upvotes: 1