回 帖 发 新 帖 刷新版面

主题:怎么把这个程序变成加abstract的啊?求高手帮忙!

各位进来关注的电脑高手,先谢谢了!

我的程序是为了用3种不同的方法来排序。首先创造一串数据(都是整数),然后用插入排序,快速排序、还有程序包里的ARRYS 三种不同的方法排同一个字串, 最后一个程序是执行程序(为了显示结果,并比较三种方法的执行时间)

一共就这5个类。 以下是我的程序:
public class Creation{
                  int[] tab;
                  
            public Creation (int n){
                  tab=new int[n];
                for(int i=0; i<tab.length; i++){
                  tab[i]=(int)(Math.random()*10);
                  }
                  tab[0]=Integer.MIN_VALUE;
                  }
                  
            public void affichetab(int c[]){
                for(int i=0; i<c.length; i++){
                  System.out.print(c[i]+" ");}
                  }
                  
            public Creation(Creation c){
            Creation e=new Creation(c.tab.length); 
        for (int i=0;i<c.tab.length;i++){
        e.tab[i]=c.tab[i];
        tab=e.tab;}
                     }
               
             public Creation(int c[]){
            Creation e=new Creation(c.length); 
             for (int i=0;i<c.length;i++){
        e.tab[i]=c[i];
                tab=e.tab;}    
                          } 
                 }

public class Triinsertion extends Creation{
    
    
       

        public Triinsertion(int n){
                 super(n);}


        public void tri(){
            int temp;
             for(int i=0; i<tab.length; i++){
              for(int j=i-1; j>=0;j--){
               if(tab[j]>tab[j+1]){
               temp=tab[j];
               tab[j]=tab[j+1];
               tab[j+1]=temp;}
               }
               }
               }
              }

public class Trirapide extends Creation{
    public Trirapide(int n){
       super (n);
    }
    
    
    public Trirapide(int tab[]){
       super(tab);}
    
    public void echange(int i,int j){
        int temp=tab[i];
        tab[i]=tab[j];
        tab[j]=temp;
    }
    
    public int partition(int l, int r){
        int v=tab[r]; 
        int i=l; 
        int j=r;
        while(i<j){
           
                while(tab[i]<v){i++;}
                while(tab[j]>=v){j--;}
                echange(i,j);
            }
        
        echange(i,j);
        echange(i,r);
        return i;
    }    
    
    
    
    public void trirapide(int l,int r){
        if(l<r){
            int i; 
            i=partition(l,r);
            trirapide(l,i-1);
            trirapide(i+1,r);
            
            }
    }    
    }

import java.util.Arrays;

public class Trisort extends Creation{

    public Trisort(int tab[]){
       super(tab);}
    
    public  Trisort(int n){
    super(n);
    }
    
    
    public void tri(){
    Arrays.sort(tab);
    }
    
    }

import java.util.*;

public class Principale{
    public static void main(String arg[]){
    
      Triinsertion t=new Triinsertion(10);
      Trirapide r=new Trirapide(t.tab);
      Trisort s=new Trisort(t.tab);
      
      System.out.println("la suite original:   ");
      t.affichetab(t.tab);
      System.out.println();
      
      
      
      long t1=(new Date()).getTime();
      t.tri();
      
      long t2=(new Date()).getTime();
      long x=t2-t1;
      System.out.println("la suite triinsertion:   ");
      t.affichetab(t.tab);
      System.out.println();
      System.out.println("le temps d'execution pour trier le tableau avec Triinsertion:"+x);
      System.out.println();
      
      
      
      
      System.out.println("la suite original:   ");
      r.affichetab(r.tab);
      System.out.println();
      
      
      
      long t3=(new Date()).getTime();
      r.trirapide(1,r.tab.length-1);
      
      long t4=(new Date()).getTime();
      long y=t4-t3;
      System.out.println("la suite trirapide:   ");
      r.affichetab(r.tab);
      System.out.println();
      System.out.println("le temps d'execution pour trier le tableau avec Trirapide:"+y);
      System.out.println();
      
      
      
      System.out.println("la suite original:   ");
      s.affichetab(s.tab);
      System.out.println();
      
      
      
      long t5=(new Date()).getTime();
      s.tri();
      
      long t6=(new Date()).getTime();
      long z=t6-t5;
      System.out.println("la suite trisort:   ");
      s.affichetab(s.tab);
      System.out.println();
      System.out.println("le temps d'execution pour trier le tableau avec Trisort:"+z);
      System.out.println();
      
      
      }
      }
      
以上是我的程序,现在我想把第一个类变成抽象的,就是:

public abstract class Creation{

 //原程序不知怎么改!

public void abstract tri();//加上这一句,tri 就是排序。
}

后面的程序好像因为加入了abstract也都要改,我是插班的,编没抽象的那个已经要命了,一加abstract 我就找不到北了。 
各位麻烦你们能不能改完了贴上来,我练术语都不懂,几乎是自己瞎学,你们要是只指点一两句,我连看都看不懂。

我的原程序是用JCreator 编的,运行的很好,没有错误。

回复列表 (共3个回复)

沙发

你的Creation类 只是用来产生数据的吧,所以只要在原来基础上加:
public abstract void  tri();  //你写的有错,改了
就可以了,其他都不用改.
然后,每个继承Creation的类,在实现排序时,实现tri();方法就可以了(把实现的方法改为tri()的就可以)

板凳

我按楼上的方法改了第一个类:

public abstract class Creation{
                  int[] tab;
                  
            public Creation (int n){
                  tab=new int[n];
                for(int i=0; i<tab.length; i++){
                  tab[i]=(int)(Math.random()*10);
                  }
                  tab[0]=Integer.MIN_VALUE;
                  }
                  
            public void affichetab(){
                for(int i=0; i<tab.length; i++){
                  System.out.print(tab[i]+" ");}
                  }
                  
            public int[] copietab(){
                 int[] c;
                 c=new int[tab.length];
                for(int i=0; i<tab.length; i++){
                 c[i]=tab[i];}
                 return c;
                 }
                 
            public abstract void tri();
            
            }


返回的错误如下:
Creation 是抽象的;无法对其进行实例化

3 楼

恩 是啊,是通过:
public class CreationTest extends Creation{

    public void tri() {
        
        
    }

}
来实现的,本身抽象类是不能实例化的(可编译成CLASS),得先实现它的抽象方法

我来回复

您尚未登录,请登录后再回复。点此登录或注册