import java.util.Arrays;
class ArrayTest
{
 public static void main(String[] args)
 {
        Students[] ss=new Students[]{new Students(10,"aa"),
                                new Students(15,"bb"),
                                new Students(16,"zz"),
                                new Students(16,"dd"),};
          Arrays.sort(ss);
          for(int i=0;i<ss.length;i++)
         {
      System.out.println(ss[i]);                       
         }
  int index = Arrays.binarySearch(ss,new Students(10,"aa"));
  System.out.println("index="+ index);
  System.out.println(ss[index]);
}
}
class Students implements Comparable
{
  int num;
  String name;
  Students(int num,String name)
  {
     this.num=num;
     this.name=name;
  }
  public String toString()
  {
     return "number "+ num+" name "+name; 
  }
  public int compareTo(Object o)
  {
    Students s = (Students)o;
    //return num>s.num ? 1 : (num==s.num ? 1 : -1);
    int result=num>s.num ? 1 : (num==s.num ? 1 : -1);
    if(0==result)
    {
       result=name.compareTo(s.name);
    }
      return result;
  }
}
编译无错,在运行的时候,会出现数据索引越界的异常错误,不知道错在何方?

解决方案 »

  1.   

    int result=num>s.num ? 1 : (num==s.num ? 1 : -1);
    你这样写不可能相等,所以,用二分查找找不到,返回的index为-1,就下标越界了改成这样就好了
    int result=num>s.num ? 1 : (num==s.num ? 0 : -1);
      

  2.   


    经鉴定过,确实重写了compare的类后的问题! 
      

  3.   


      //return num>s.num ? 1 : (num==s.num ? 1 : -1);
    int result=num>s.num ? 1 : (num==s.num ? 1 : -1);lz是不是没改成?
      

  4.   

     for(int i=0;i<ss.length;i++)
    这里应该是ss.length-1
      

  5.   

    用二分查找找不到,返回的index为-1,就下标越界了
    如果你想要在SS数组里面找Students(10,"aa")这个对象的话,本来是可以找到的,
    但是你现在的代码里面找的是新new出来的Students(10,"aa"),这个跟你前面放进数组里面的那个
    Students 不是同一个对象,所以找不到.
    可以先把Student student= new Students(10,"aa");
    再把student放到数组里面,找的时候
    int index = Arrays.binarySearch(ss,student);
    这样就可以找到对象,也就不会出现下标越界啦~~~