日期:2014-05-20  浏览次数:20773 次

有关容器和接口的问题
编的是一个利用容器和接口对不同的对象进行排序
定义的接口
public interface sortable {
boolean lessthan(sortable s);
}

扩展的接口
public class intsort implements sortable{
private int val;
public intsort(int val){this.val=val;}
public boolean lessthan(sortable s){
intsort mi=(intsort)s;
return this.val<mi.val;
}
}

排序的用的选择排序
import java.util.Vector;
public class sort {
void sortting(Vector z){
int k;
int n=z.size();
k=0;
while(k!=n-1){
int j=getsmallest(z,k);
exchange(z,k,j);
k++;
}
}
int getsmallest(Vector v,int k){
if(v==null||v.size()==k){
return -1;
}
int i,small;
i=k+1;
small=k;
while(i!=v.size()){
sortable current=(sortable)v.elementAt(i);  //运行到这的时候提示错误
sortable smallest=(sortable)v.elementAt(small);
if(current.lessthan(smallest))
small=i;
i++;
}
return small;
}
void exchange(Vector v,int k,int j){
sortable temp;
temp=(sortable) v.elementAt(k);
v.setElementAt(v.elementAt(j),k);
v.setElementAt(temp, j);
}
}

import java.util.Vector;


public class main {
public static void main(String args[])throws Exception{
Vector xu=new Vector();
int i;
xu.add((Integer)1);
xu.add((Integer)5);
xu.add((Integer)2);
xu.add((Integer)3);
sort t=new sort();
t.sortting(xu);
for(i=0;i<xu.size();i++)
System.out.println((int)xu.elementAt(i));
}
}

请大神帮帮忙阿!
interface Vector

------解决方案--------------------
引用:
Quote: 引用:

给楼主提两点建议吧,
第一,类名首字母大写,
第二,把报错信息发上来。

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to sortable
at sort.getsmallest(sort.java:21)
at sort.sortting(sort.java:8)
at main.main(main.java:13)
嗯嗯,自学java,新手求教啊

对嘛,看报错。
这不写的很清楚了吧。你试图吧一个int类型的转化为sortable型的而导致出现的错误。。
虽然我感觉你这方法怪怪的,但是不好评价,改成下面应该就不会报错了。
public class main {
    public static void main(String args[])throws Exception{
        Vector xu=new Vector();
        int i;
sortable s1=new sortable();
s1.insert(1);
        xu.add(s1));//这里应该添加的是对象,而不是数字。
//当然,我建议你直接重写一个构造函数,直接xu.add(new sortable(1));这样多方便。
        
        sort t=new sort();
        t.sortting(xu);
        for(i=0;i<xu.size();i++)
            System.out.println((int)xu.elementAt(i));
    }
}