我有一个类型为String,double和float的数组,我需要能够在其中搜索String。我尝试进行二分查找,但是当我运行程序并尝试搜索时出现以下错误:
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)
我还没有找到任何其他搜索3d数组的方法,所以非常感谢任何帮助。
这是我的代码:
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;
答案 0 :(得分:1)
您可能希望使用Map()
,而不是使用数组Customer myCust = customers.get(search);
另一种选择是创建一个新客户
Customer searchCust = new Customer(search);
place = Arrays.binarySearch(A,searchCust);
要在最后一节正确找到客户,您需要实现Comparable接口:
// 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
}
}
或者您可以使用@ spinttheblack的帖子中定义的比较器。
答案 1 :(得分:1)
看起来你正在传递一个Customer数组并搜索一个字符串。
除了glowcoder的解决方案(创建虚拟客户)之外,您可能还需要覆盖Customer的compareTo方法。即,
class Customer{
compareTo(Object o1, Object o2){
return ((Customer)o1).getStringField().compareTo(((Customer)o2).getStringField())
}
}