2011-03-02 102 views
0

我有一个String,double和float类型的数组,我需要能够在其中搜索字符串。我试图做一个二进制搜索,但我发现了以下错误,当我运行该程序,并尝试搜索:在字符串中搜索多维数组

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

地方 - 你铸塑'Customer'哪里,你应该把它转换为'String' – Nishant 2011-03-02 17:59:58

回答

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的帖子中定义的比较器。

+0

我有使用数组。这是我的Java类的一个任务。 :/我会尝试制作一个新的客户。谢谢。 – Lish 2011-03-02 18:00:40

+0

这样做!谢谢! – Lish 2011-03-02 18:02:52

+0

我的想法很多,这就是为什么我在那里放两个选项。请记住,您需要重写客户中的“公共布尔等于(Object o)”方法才能工作。否则,它会做参考比较,它不会工作。 – corsiKa 2011-03-02 18:03:06

1

看起来您正在传入一个Customer数组并搜索一个字符串。

除了glowcoder的解决方案(创建一个虚拟Customer),您可能需要重写Customer的compareTo方法。即,

class Customer{ 
    compareTo(Object o1, Object o2){ 
      return ((Customer)o1).getStringField().compareTo(((Customer)o2).getStringField()) 
    } 
}