rke_poke
rke_poke
采纳率50%
2017-05-12 14:03

数组排序是的类型转化问题

已采纳

public class MaoPao2 {
@Test
public void test2() {
Student[] st = new Student[100];
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
for (int i = 0; i < n; i++) {
String name = sc.nextLine();
int degree = Integer.parseInt(sc.nextLine());
Student s = new Student();
s.setName(name);
s.setDegree(degree);
st[i] = s;
}
Arrays.sort( st);
for (int i = 0; i < n; i++) {
System.out.println(st[i].getName() + ":" + st[i].getDegree());
}
}

}
package paixu_Code;

public class Student {
String name;
int degree;

public Student() {

}

public Student(String name, int degree) {
    super();
    this.name = name;
    this.degree = degree;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getDegree() {
    return degree;
}

public void setDegree(int degree) {
    this.degree = degree;
}

}
报的错是:
java.lang.ClassCastException: paixu_Code.Student cannot be cast to java.lang.Comparable
at paixu_Code.MaoPao2.test2(MaoPao2.java:64)
即:Arrays.sort( st);转化错误

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • com_it 青鸟路过佳城 4年前

    这个类型转换异常比较常见,原因可能是你输入了double类型,就不能转换为int,如果要转需要强转

    点赞 评论 复制链接分享
  • pqdong pqdong 4年前

    Arrays.sort();
    1.对于基本数据类型可以直接比较,不必实现Comparable接口
    2.而对于对象数组的排序:参见API。
    public static void sort(Object[] a)根据元素的自然顺序对指定对象数组按升序进行排序。
    数组中的所有元素都必须实现 Comparable 接口。此外,数组中的所有元素都必须是可相互比较的(也就是说,对于数组中的任何 e1 和 e2 元素而言,e1.compareTo(e2) 不得抛出 ClassCastException)。
    保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。

    该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n*log(n) 性能。

    参数:
    a - 要排序的数组
    抛出:
    ClassCastException - 如果数组包含不可相互比较的 的元素(例如,字符串和整数)。

    因为没有实现接口所以不可以对数组中的字符串(name)作比较,所以会抛出ClassCastException异常
    因此要先实现Comparable接口

    点赞 评论 复制链接分享

相关推荐