0

I have programmed a Worker class and the driverclass for Worker.. My working class is compiling fine and showing the desired output.. But in array and StringTokenizer I am facing the main problem... And in line 32 of TestWorker.java there is an error, and I donot know why is it giving The question is...

(i)Declare an array that can store the references of up to 5 Worker objects constructed with the data(name,workerID and hourlyRate).

(ii)And now allow the users to enter workerID and hours repeatedly until user enter an empty string. Read these values and invoke the method addWeekly() on the appropriate object (by searching through the array to locate the object with the specified ID). If a nonexistent ID is entered, display an appropriate error message.

(iii)Compute and display the salary for all the workers

Please see my codes below.....

//Worker.java

public class Worker { 
        public final double bonus=100;    
        protected String name, workerID;
        protected double hourlyRate, totalHoursWorked,tax,grossSalary,netSalary;

        public Worker(){

    }
public Worker(String name, String workerID, double hourlyRate){
    this.name = name;
    this.workerID = workerID;
    this.hourlyRate = hourlyRate;

    }

public void addWeekly(double hoursWorked){
    this.totalHoursWorked = this.totalHoursWorked + hoursWorked;
    }

public double gross(){
    grossSalary = (totalHoursWorked*hourlyRate);
            if(totalHoursWorked>=150){
        grossSalary = grossSalary +100;
        }
        return  grossSalary;
        }
public double netAndTax(){
    netSalary = grossSalary;
    if(grossSalary>500){
        tax = (grossSalary - 500) *0.3;
        netSalary = (grossSalary - tax);

    }
    return netSalary;
 }
public String getName(){
    return this.name;
}

public String getWorkerID(){
    return this.workerID;
}

public double getHourlyRate(){
    return this.hourlyRate;
}

public double getTotalHours(){
    return totalHoursWorked;
}

public double getGrossSalary(){
    return grossSalary;
    }

public void addToGross(double amt){
    grossSalary = grossSalary + amt;
}
public void displaySalary(){
    System.out.print("Name: " +getName() + "\nID :" + getWorkerID() 
            + "\nHourly Rate: " + getHourlyRate()+ "\nTotalHours Worked" + getTotalHours() + 
            "\nGross pay" + getGrossSalary() + "\nTax: " + netAndTax() + 
            "\nNet Pay: " + netAndTax());
}

}

//TestWorker.java

import java.util.Scanner;
import java.util.StringTokenizer;
public class TestWorker {
    public static void main(String args[]){
        Worker e = new Worker("John Major","s123",15.0);
        e.addWeekly(45);
        e.addWeekly(40);
        e.addWeekly(32);
        e.addWeekly(38);
        e.gross();
        e.netAndTax();
        e.displaySalary();

        Worker[] worklist = new Worker[5];
        worklist[0] = new Worker("Richard Cooper","s1235",20.0);
        worklist[1] = new Worker("John Major","s1236",18.0);
        worklist[2] = new Worker("Mary Thatcher","s1237",15.0);
        worklist[3] = new Worker("David Benjamin","s1238",16.0);
        worklist[4] = new Worker("Jack Soo","s1239",25.0);

    Scanner input = new Scanner(System.in);
    String name;
    double hourly;

    do{
        System.out.println("\n"); 
        System.out.print("Please Enter ID and hours-worked in a given week: ");
        name = input.nextLine();

        StringTokenizer string = new StringTokenizer(name,"+");
        String[] array  =new String[(string.countTokens)];
        for(int i=0;i<=4;i++){
            if(array[0].equals(worklist[0])){
            e.getName();
            e.getWorkerID();
            e.addWeekly(Double.parseDouble(array[0]));
            e.gross();
            e.displaySalary();

            }
            else if(array[0].equals(worklist[1])){
            e.getName();
            e.getWorkerID();
            e.addWeekly(Double.parseDouble(array[1]));
            e.gross();
            e.displaySalary();
            }

            else if(array[0].equals(worklist[2])){
            e.getName();
            e.getWorkerID();
            e.addWeekly(Double.parseDouble(array[2]));
            e.gross();
            e.displaySalary();
            }

            else if(array[0].equals(worklist[3])){
            e.getName();
            e.getWorkerID();
            e.addWeekly(Double.parseDouble(array[3]));
            e.gross();
            e.displaySalary();
            }

            else if(array[0].equals(worklist[4])){
            e.getName();
            e.getWorkerID();
            e.getHourlyRate();
            e.addWeekly(Double.parseDouble(array[4]));
            e.gross();
            e.displaySalary();
            }

            else{
            System.out.println("Please Enter correct information");
        }

     }

        System.out.println();
        while(string.hasMoreElements()){
            System.out.println(string.nextElement());
        }
    }
    while(name.isEmpty()==false);
    }

}
1
  • in line 32 of TestWorker...error = symbol cannot be found and...illegal start of type Commented Oct 16, 2012 at 14:14

2 Answers 2

1

Firstly, you've specified countTokens as a field when it is actually a method on this line:

String[] array = new String[(string.countTokens)]; // Incorrect
String[] array = new String[(string.countTokens())]; // Correct

Now you seem to be splitting the input on a + sign? So you're expected input is something along the lines of s123+12 which would mean ID s123 worked 12 hours this week. So in order to solve something like you probably want a loop that looks like this:

Scanner input = new Scanner(System.in);

System.out.println("\n");
System.out.print("Please Enter ID and hours-worked in a given week: ");
String enteredString = input.nextLine();

while (!enteredString.isEmpty()) {
    StringTokenizer stringtok = new StringTokenizer(enteredString, "+");
    String id = stringtok.nextToken();
    Double hours = Double.parseDouble(stringtok.nextToken());

    for (int i = 0; i < 5; i++) {
        if (worklist[i].getWorkerID().equals(id)) {
            worklist[i].addWeekly(hours);
            break;
        }
    }

    System.out.println("\n");
    System.out.print("Please Enter ID and hours-worked in a given week: ");
    enteredString = input.nextLine();
}

for (int i = 0; i < 5; i++) {
    worklist[i].gross();
    worklist[i].netAndTax();
    worklist[i].displaySalary();
}

Keep in mind that this is very rough and I'm not entirely clear from your instructions on what exactly you are trying to achieve.

Sign up to request clarification or add additional context in comments.

3 Comments

oo, I see, my mistake...Thanks alot Recurcive, yestarday also u helped me...U r a real help....let me give it a try
i have taken some of your codes, and implement in my 1, it complies fine but, gives This error"Exception in thread "main" java.util.NoSuchElementException at java.util.StringTokenizer.nextToken(StringTokenizer.java:349) at TestWorker2.main(TestWorker2.java:33)"
What input are you putting in?
0

Why not consider String.split() name.split("\\+") that will give you a string array

2 Comments

The question asked to use StringTokenizer
Then iterate through the StringTokenizer and populate the array first before using it

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.