0

I want to produce output for how long it takes to do linear search and binary search. My code is given below, it is giving this error when I run it. "java.lang.ClassCastException: java.lang.String cannot be cast to Employee"

import java.util.*;
import java.util.Collections;
public class H275{public static void main (String[] args){while (JPL.test()){ 
  Employee[] employees = new Employee[1000000];  
  for (int i = 0, numv = employees.length; i < employees.length; numv = employees.length - ++i)
  {String num = Integer.toString(numv);
    switch (i % 3)
    {case 0 : employees[i] = new Secretary("NameA" + num, "America" + num,
                                           1000.0 * numv); 
    break;
      case 1 : employees[i] = new Manager("NameB" + num, "Australia" + num,
                                          2000.0 * numv);  
      break;
      case 2 : employees[i] = new Salesman("NameC" + num,"Brazil" + num,
                                           1500.0 * numv, 200.0 * numv);
    }
  }
  for (Employee e : employees)  
    e.raise();
  for (Employee.SortType s : Employee.SortType.values())
  {employees[0].setSort(s);
    long startTime = System.nanoTime();
    Arrays.sort(employees);
    long endTime = System.nanoTime();

  }
  employees[0].setSort(Employee.SortType.NAMESORT);
  Arrays.sort(employees);
  String name;
  int count = 0;


 Employee e1;
 for (int i = 0, numv = employees.length; i < employees.length; numv = employees.length - ++i)
  {
   String num = Integer.toString(numv);
   switch (i % 3)
    {case 0 : e1 = new Secretary("NameA" + num, "America" + num,
                                           1000.0 * numv); 
    break;
      case 1 : e1 = new Manager("NameB" + num, "Australia" + num,
                                          2000.0 * numv);  
      break;
      case 2 : e1 = new Salesman("NameC" + num,"Brazil" + num,
                                           1500.0 * numv, 200.0 * numv);
    }
  }



  long startTime = System.nanoTime();
  for (int e = 0; e < employees.length; e += 10000)
  {
    name = employees[e].getName();
    count++;
    if(employees[e].getName().equals(name))
    {

      break;
    }
  }
  long endTime = System.nanoTime();

  System.out.println("\nAverage Elapsed LinearSearch time = " + (endTime - startTime) / (1000000.0 * count) + " milliseconds");
  startTime = System.nanoTime();
  for (int e = 0; e < employees.length; e += 10000)


  {
    String name2 = employees[e].getName();

   Arrays.binarySearch(employees,name2); 


    endTime = System.nanoTime();
    break;
  }

  System.out.println("\nAverage Elapsed BinarySearch time = " + (endTime - startTime) / (1000000.0 * count) + " milliseconds");
}}}


abstract class Employee implements Comparable<Employee>
{
  private String name;
  private String address;
  protected double salary;
  public enum SortType{NAMESORT,ADDRESSSORT,JOBSORT,SALARYSORT};
  static private SortType sortType;
  public Employee(String nm, String add, double sal)
  {
   name=nm;
   address=add;
   salary=sal;
  }
  public abstract double raise();

  public String getName()
  {
   return name; 
  }
  public SortType setSort(SortType sortType)
  {
    return sortType;
  }
  public int compareTo(Employee e)
  {
    return 0;
  }
  public String toString()
  {
    return "hello";

  }
}
class Secretary extends Employee
{
 public Secretary(String name, String add, double sal)
 {
  super(name,add,sal); 
 }
 public double raise()
 {
  return salary; 
 } 

}

class Salesman extends Employee
{
  private double commission;
 public Salesman(String name,String address, double salary, double comm)
 {
   super(name,address,salary);
   commission=comm;
 }
 public double raise()
 {
  return salary+commission; 
 }
 public String toString()
 {

   return "test";
 }

}
class Manager extends Employee
{
  public Manager(String name,String address, double salary)
 {
   super(name,address,salary);
 }
  public double raise()
  {
   return salary+(0.05*salary); 

  }

}
1
  • 2
    In Which line are u getting this error? Commented Oct 13, 2014 at 9:10

1 Answer 1

1

The second paramter of Arrays.binarySearch( must be an instance of Employee, because your array contains Employees. So call Arrays.binarySearch(employees,employees[e]);

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

Comments

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.