Java 对象数组的二进制搜索
我得到了一些包含Person对象数组的代码,我将编写一些方法来执行二进制搜索,并重写Person类中的compareto方法,以便根据姓氏和姓氏进行比较Java 对象数组的二进制搜索,java,binary-search,compareto,Java,Binary Search,Compareto,我得到了一些包含Person对象数组的代码,我将编写一些方法来执行二进制搜索,并重写Person类中的compareto方法,以便根据姓氏和姓氏进行比较 public static int binarySearch( Person[] persons, Person key ) { int low = 0; int high = persons.length - 1; return binarySearch(persons, key, low, hig
public static int binarySearch( Person[] persons, Person key )
{
int low = 0;
int high = persons.length - 1;
return binarySearch(persons, key, low, high);
}
private static int binarySearch( Person[]persons, Person key, int low, int high )
{
if(low > high) //The list has been exhausted without a match.
return -low - 1;
int mid = (low + high) / 2;
if (persons[mid] == key)
return mid;
if(persons[mid] < key) //!!**'The < operator is undefined for the type'
return binarySearch(persons, key, low, mid-1);
else
return binarySearch(persons, key, 0, persons.length -1);
}
谢谢你的帮助 而不是
if(persons[mid] < key)
if(人员[中间]
使用
if(人员[mid]。与(键)<0)比较
试试这个:
int mid = (low + high) / 2;
if (persons[mid].compareTo(key) == 0)
return mid;
if(persons[mid].compareTo(key) < 0)
return binarySearch(persons, key, low, mid-1);
else
return binarySearch(persons, key, 0, persons.length -1);
int-mid=(低+高)/2;
如果(人员[mid]。比较(键)==0)
中途返回;
如果(人员[mid]。与(键)<0)比较
返回二进制搜索(persons、key、low、mid-1);
其他的
返回二进制搜索(persons,key,0,persons.length-1);
您不能使用类似运算符的
来比较对象。您正在比较两个对象引用,它们只包含指向实际person对象位置的位模式。对于对象比较,需要定义要比较的属性(属性)。
所以试试这个
if (persons[mid].compareTo(key) == 0)
return mid;
if(persons[mid].compareTo(key) < 0)
而且您在比较中没有使用这个。应该是这样的
public int compareTo( Object o )
{
Person p = (Person) o;
int d = this.getLastName().compareTo(p.getLastName());
if (d == 0)
d = this.getFirstName().compareTo(p.getFirstName());
return d;
}
您的persons数组是否已排序?如果(persons[mid]
确保它不是
并且未为对象定义
if (persons[mid].compareTo(key) == 0)
return mid;
if(persons[mid].compareTo(key) < 0)
return binarySearch(persons, key, mid +1, high);
else
return binarySearch(persons, key, low, mid -1);
public int compareTo( Object o )
{
Person p = (Person) o;
int d = this.getLastName().compareTo(p.getLastName());
if (d == 0)
d = this.getFirstName().compareTo(p.getFirstName());
return d;
}