学了Comparable接口后,我们知道了Comparable可以对每个类的对象进行排序。
由于书上练习是给出具体的某个数组对象,例如:
L_ComparaDemo[] c=new L_ComparaDemo[]{
new L_ComparaDemo(),new L_ComparaDemo()//一一列出
};
上面的数据是在对象数组中一一列出具体的对象。
于是我得到一的思考,既然可以队每个类的对象排序,那么对象数组能否自己定义一个对象,并且进行赋值对象,且不用一一列出呢?于是我写了一个代码:
package com.lianxi_3;
//L03_Comparable类
public class L03_Comparable implements Comparable{
@Overridef
private int i;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public int compareTo(Object o) {
// TODO Auto-generated method stub
if(o instanceof L03_Comparable) {
if(i>((L03_Comparable)o).i) {
return 1;
}else if(i<((L03_Comparable)o).i){
return -1;
}else
return 0;
}else
throw new ClassCastException("不是该类对象,不能比较");
}
public String toString(){
return""+i;
}
}
//主程序
package com.lianxi_3;
import java.util.Arrays;
import java.util.Scanner;
public class L03_ComparableDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i;
Object[] a1 = new Object[16];// 定义一个对象数组a1[]
System.out.println("请输入要比较的数:");
for (int a = 0; a < 16; a++) {
Scanner sc = new Scanner(System.in);
i = sc.nextInt();
a1[a] = new L03_Comparable();// 对象数组中的每一个对象元素赋上一个L03_Comparable()新对象
((L03_Comparable) a1[a]).setI(i);// 每一个L03_Comparable()新对象的赋值
if (a == 15)
sc.close();// 关闭流
}
L03_Comparable[] cp = new L03_Comparable[16];// 定义一个数组对象cp[]
for (int j = 0; j < 16; j++) {
cp[j] = (L03_Comparable) a1[j];// 数组对象中的每一个对象赋上a1[],i与((L03_Comparable)o).i
}
System.out.println("*************排序前输出***************");
System.out.println(Arrays.asList(cp));//输出cp中排序前的元素列表
System.out.println("*************排序后输出***************");
Arrays.sort(cp);//排序数组对象cp[]
System.out.println(Arrays.asList(cp));//输出cp中排序后的元素列表
}
}
我发现:
1.定义抽象的对象数组,可以Object[] a1 = new Object[16],即可以用Object类,这个类非常实用。
2.抽象定义的对象数组cp[]并不能直接调用L03_Comparable类中的setI()方法,虽然不会报错,但是无法把输入数据传输到L03_Comparable类比较。所以我折中重新定义了一个抽象类数组a1[],采用((L03_Comparable) a1[a]).setI(i)的办法来给每个对象的i赋值。
3.注意键入数据完成后Scanner的流必须关闭。
4.cp[]不用一一列出对象元素的方法:
L03_Comparable[] cp = new L03_Comparable[16];
for (int j = 0; j < 16; j++) {
cp[j] = (L03_Comparable) a1[j];// 数组对象中的每一个对象赋上a1[],i与((L03_Comparable)o).i
}