I have an array with types String, double, and float, and I need to be able to search for a String in it. I tried to do a binary search, but I'm getting the following error when I run the program and attempt a search:
java.lang.ClassCastException: java.lang.String cannot be cast to Customer
at Customer.compareTo(prog4.java:1)
at java.util.Arrays.binarySearch0(Unknown Source)
at java.util.Arrays.binarySearch(Unknown Source)
at prog4.main(prog4.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:271)
I haven't found any other methods for searching a 3d array, so any help would be greatly appreciated.
Here is my code:
case 'b':
System.out.println();
System.out.println("Please enter a customer name:");
String search = kb.nextLine(); //read the user's search
int place; //location of result
Arrays.sort(A);
place = Arrays.binarySearch(A, search);
if (place <= 0)
System.out.println("Cannot find customer named " + search);
else
{
System.out.println("Customer found:");
System.out.println(A[place]);
}
break;
Rather than using an array, you would want to use a Map()
Customer myCust = customers.get(search);
Another option would be to create a new Customer
Customer searchCust = new Customer(search);
place = Arrays.binarySearch(A,searchCust);
For the last section to find a customer correctly, you'll need to implement the Comparable interface:
// add this
public class Customer implements Comparable<Customer> {
// add this guy
public int compareTo(Customer other) {
return this.name.compareTo(other.name); // I'm assuming 'name' is the variable of the name
}
}
or you can use the Comparator defined in @spinttheblack's post.
It looks like you're passing in an array of Customer and searching for a string.
In addition to glowcoder's solution (create a dummy Customer), you'll likely need to override the compareTo method of Customer. Ie,
class Customer{
compareTo(Object o1, Object o2){
return ((Customer)o1).getStringField().compareTo(((Customer)o2).getStringField())
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.