Sort by the following (name, address, dependent and gender) of these and ask the user which field to sort by !. this mean the following java must sort by address if we need, by name , by dependent , and by gender it depend on the following java it must have an option which we need to sort. please i need your help now, you just add the sorting on the following java.
// Use a custom comparator.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
class Emprec {
String name;
String address;
double hours;
double rate;
int dependents;
char gender;
boolean degree;
// This is the classes's constructor !!!!
Emprec(String name, String address, String hours,String dependents) {
try {
this.name =
name;
this.address =
address;
this.hours =
Double.valueOf(hours).doubleValue();
this.dependents
= Integer.parseInt(dependents);
} catch (NumberFormatException
errmsg) {
System.out.println("Invalid format" + errmsg);
this.name =
"";
this.hours =
0.0;
}// catch
}// Emprec constructor !!!!
double calc_fed_tax(double hours, double rate) {
double yearly_income;
yearly_income = hours * rate * 52;
if (yearly_income <
30000.00)
return (hours *
rate * .28);
else if (yearly_income <
50000.00)
return (hours *
rate * .32);
else
return (hours *
rate * .38);
}// calc_fed_tax
double calc_state_tax(double hours, double rate) {
double state_tax;
state_tax = hours * rate * .0561;
return (state_tax);
}// calc_state_tax
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public double getHours() {
return hours;
}
public int getDependents() {
return dependents;
}
public double getRate(){
return rate;
}
public char getGender(){
return gender;
}
public String toString() {
return ("\n Name: " + name
+
"\n Address: " + address +
"\n Hours: " + hours+
"\n Dependents " + dependents);
}// toString
}// Emprec
public class CompDemo3Sorts_Improved {
public static void main(String args[]) throws
IOException {
// Create a tree set
BufferedReader inData = new
BufferedReader(new InputStreamReader(
System.in));
// create strings for the input
data for the Emprec object
String str_name;
String str_address;
String str_hours;
String str_dependents;
TreeSet ts = new TreeSet(new
MyCompHours());// eclipse ask for casting
for (;;) {
System.out.print(" name: ");
str_name =
inData.readLine();
if
(str_name.equalsIgnoreCase("exit")) break;
System.out.print(" Address: ");
str_address =
inData.readLine();
System.out.print(" Hours: ");
str_hours =
inData.readLine();
System.out.print(" Dependents: ");
str_dependents =
inData.readLine();
Emprec employee = new Emprec(str_name, str_address, str_hours,str_dependents);
ts.add(employee);
}// for
// Get an iterator
Iterator i = ts.iterator();
// Display elements
while (i.hasNext()) {
Object element =
i.next();
System.out.print(element + "\n");// calls the toString()
}//while
System.out.println();
}
}
class MyCompName implements Comparator{ // eclipse ask for
casting object
public int compare(Object emp1, Object emp2) {
String emp1Name = ((Emprec) emp1).getName();
String emp2Name = ((Emprec) emp2).getName();
return
((emp2Name.compareTo(emp1Name) <= 0) ? -1 : +1);
}
}
class MyCompHours implements Comparator{ // eclipse ask for casting
object
public int compare(Object emp1, Object emp2) {
double emp1Hours = ((Emprec) emp1).getHours();
double emp2Hours = ((Emprec) emp2).getHours();
return (emp1Hours <= emp2Hours)?
-1:+1;
}
}
class MyCompAddress implements Comparator{ // eclipse ask for
casting object
public int compare(Object emp1, Object emp2) {
String emp1Address = ((Emprec) emp1).getAddress();
String emp2Address = ((Emprec) emp2).getAddress();
return
((emp2Address.compareTo(emp1Address) <= 0) ? -1 : +1);
}
}
class MyCompRate implements Comparator{
public int compare(Object emp1, Object emp2){
double emp1Rate = ((Emprec) emp1).getRate();
double emp2Rate = ((Emprec) emp2).getRate();
return ((emp1Rate <= emp2Rate) ? -1 : +1);
}
}
class MyCompDependents implements Comparator{
public int compare(Object emp1, Object emp2){
int emp1Dependents = ((Emprec) emp1).getDependents();
int emp2Dependents = ((Emprec) emp2).getDependents();
return ((emp1Dependents <= emp2Dependents) ? -1 : +1);
}
}
class MyCompGender implements Comparator{
public int compare(Object emp1, Object emp2){
char emp1Gender = ((Emprec) emp1).getGender();
char emp2Gender = ((Emprec) emp2).getGender();
return ((emp1Gender <= emp2Gender) ? -1 : +1);
}
}
Program Plan:
Program:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Emprec {
String name;
String address;
double hours;
double rate;
int dependents;
char gender;
boolean degree;
// Emprec Constructor
Emprec(String name, String address, String gender,
String dependents) {
try {
this.name =
name;
this.address =
address;
this.gender =
gender.charAt(0);
this.dependents
= Integer.parseInt(dependents);
} catch (NumberFormatException
errmsg) {
System.out.println("Invalid format" + errmsg);
this.name =
"";
this.hours =
0.0;
} // catch
}// Emprec constructor !!!!
double calc_fed_tax(double hours, double rate) {
double yearly_income;
yearly_income = hours * rate *
52;
if (yearly_income <
30000.00)
return (hours *
rate * .28);
else if (yearly_income <
50000.00)
return (hours *
rate * .32);
else
return (hours *
rate * .38);
}// calc_fed_tax
double calc_state_tax(double hours, double rate)
{
double state_tax;
state_tax = hours * rate *
.0561;
return (state_tax);
}// calc_state_tax
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public double getHours() {
return hours;
}
public int getDependents() {
return dependents;
}
public double getRate() {
return rate;
}
public char getGender() {
return gender;
}
public String toString() {
return ("{ Name: " + name + ",
Address: " + address + ", Gender: " + gender + ", Dependents " +
dependents
+ "}");
}// toString
}// Emprec
public class CompDemo3Sorts_Improved {
@SuppressWarnings("unchecked")
public static void main(String args[]) throws
IOException {
// Create a tree set
BufferedReader inData = new
BufferedReader(new InputStreamReader(System.in));
// create strings for the input
data for the Emprec object
String str_name;
String str_address;
String str_gender;
String str_dependents;
String choice;
int sortBy;
ArrayList<Emprec> ts = new
ArrayList<>();// Array list for Emprec
do {
System.out.print(" name: ");
str_name =
inData.readLine();
System.out.print(" Address: ");
str_address =
inData.readLine();
// get
gender
System.out.print(" Gender: ");
str_gender =
inData.readLine();
System.out.print(" Dependents: ");
str_dependents =
inData.readLine();
Emprec employee = new Emprec(str_name, str_address, str_gender, str_dependents);
ts.add(employee);
System.out.println("Press Y to add another employee record or N to
exit : ");
choice =
inData.readLine();// get user input to add employee record
} while
(choice.equalsIgnoreCase("Y"));
System.out.println("*************************************************************");
System.out.println("\t\t\tList
Before Sorting ");
System.out.println("*************************************************************");
// print unsorted list
ts.forEach(System.out::println);
// Sorting selection by user
System.out.println("Sorting
selection : ");
System.out.println("Press 1 to sort
by Name");
System.out.println("Press 2 to sort
by Address");
System.out.println("Press 3 to sort
by Dependent ");
System.out.println("Press 4 to sort
by Gender");
sortBy =
Integer.parseInt(inData.readLine());// get user input
if (sortBy == 1)
Collections.sort(ts, new MyCompName());// sort by name
else if (sortBy == 2)
Collections.sort(ts, new MyCompAddress());// sort by address
else if (sortBy == 3)
Collections.sort(ts, new MyCompDependents());// sort by
dependents
else
Collections.sort(ts, new MyCompGender());// sort by gender
System.out.println("*************************************************************");
System.out.println("\t\t\tList
After Sorting ");
System.out.println("*************************************************************");
// print sorted list
ts.forEach(System.out::println);
}
}
//Name Comparator Class
class MyCompName implements Comparator { // eclipse ask for casting
object
public int compare(Object emp1, Object emp2) {
String emp1Name = ((Emprec) emp1).getName();
String emp2Name = ((Emprec) emp2).getName();
return
(emp1Name.compareTo(emp2Name));
}
}
//Hours Comparator Class
class MyCompHours implements Comparator { // eclipse ask for
casting object
public int compare(Object emp1, Object emp2) {
double emp1Hours = ((Emprec) emp1).getHours();
double emp2Hours = ((Emprec) emp2).getHours();
return (emp1Hours <=
emp2Hours) ? -1 : 1;
}
}
//Address Comparator Class
class MyCompAddress implements Comparator { // eclipse ask for
casting object
public int compare(Object emp1, Object emp2) {
String emp1Address = ((Emprec) emp1).getAddress();
String emp2Address = ((Emprec) emp2).getAddress();
return (emp1Address.compareTo(emp2Address));
}
}
//Rate Comparator Class
class MyCompRate implements Comparator {
public int compare(Object emp1, Object emp2) {
double emp1Rate = ((Emprec)
emp1).getRate();
double emp2Rate = ((Emprec)
emp2).getRate();
return ((emp1Rate <=
emp2Rate) ? -1 : 1);
}
}
//Dependents Comparator Class
class MyCompDependents implements Comparator {
public int compare(Object emp1, Object emp2) {
int emp1Dependents = ((Emprec)
emp1).getDependents();
int emp2Dependents = ((Emprec)
emp2).getDependents();
return ((emp1Dependents <=
emp2Dependents) ? -1 : 1);
}
}
//Gender Comparator Class
class MyCompGender implements Comparator {
public int compare(Object emp1, Object emp2) {
char emp1Gender = ((Emprec)
emp1).getGender();
char emp2Gender = ((Emprec)
emp2).getGender();
return ((emp1Gender <=
emp2Gender) ? -1 : +1);
}
}
Sample Input and Output:
Get Answers For Free
Most questions answered within 1 hours.