Поиск многомерных массивов для строки - PullRequest
0 голосов
/ 02 марта 2011

У меня есть массив с типами 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)

Я не нашел других способов поиска в трехмерном массиве, поэтому любая помощь будет принята с благодарностью.

Вот мой код:

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;

Ответы [ 2 ]

1 голос
/ 02 марта 2011

Похоже, вы передаете массив Customer и ищете строку.

В дополнение к решению накаливания (создайте фиктивного Клиента), вам, вероятно, потребуется переопределить метод сравнения Клиента.Т.е.

class Customer{
     compareTo(Object o1, Object o2){
            return ((Customer)o1).getStringField().compareTo(((Customer)o2).getStringField())
     }
}
1 голос
/ 02 марта 2011

Вместо использования массива вы хотели бы использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...