0

此应用程序对一个数组进行排序。想用一行相等的值来表示当前项目的变化。我不知道我会把paint方法(或draw)放在哪里来绘制我当前的项目,因为方法“run()”不能。

class sortareBubbleSort extends Canvas implements Runnable{

    Dimension dim = new Dimension (300 , 300) ;

    public Dimension getPreferredSize () {
        return dim ;
    }

    public void paint ( Graphics g) {
        g.setColor (Color.black);
        g.drawRect (0, 0, dim .width -1, dim.height -1);
    }

    //public void update ( Graphics g) {
    //paint (g);} 

    int nre,min,max;

    public sortareBubbleSort(int nre,int min,int max){
        this.nre=nre;
        this.min=min;
        this.max=max;
    }

    public void run(){
        int[] x=new int [nre];
        for(int i=0;i<x.length-1;i++)
            x[i]=min+(int)(Math.random()*((max-min)+1));
        boolean doMore = true;
        while (doMore) {
            doMore = false;  
            for (int i=0; i<x.length-1; i++) {
                if (x[i] > x[i+1]) {
                    int temp = x[i];
                    x[i] = x[i+1];
                    x[i+1] = temp;
                    doMore = true; 
                    g.drawLine(50,50,x[i+1],50);
                }
            }
        }
    }

最后,我希望它看起来像这样:

为此数组 Arr[]={4,3,5,2,1} 在画布中绘制:_ __ _ __ ___

( Arr 使用其中一种方法排序的已排序向量之一)

1 2 3 4 5

4

1 回答 1

0

您需要根据 的内容对您的paint()方法进行所有绘制x,因此如下所示:

public void paint ( Graphics g) {
    g.setColor (Color.black);
    g.drawRect (0, 0, dim .width -1, dim.height -1);
    if (x != null) {
      // loop which paints x
    }
}

为此,paint()方法需要访问x,因此它必须是成员变量,如下所示:

int nre,min,max;
int[] x; //added, leave to default value null 

然后改变你的run()方法来匹配,首先在开始时设置成员变量:

x = new int[nre]; // int[] removed from this line, x is member variable

然后在您的内部循环中,将g.drawLine()call 简单地替换为 call to repaint()


可以优化绘图,以便每次都不会重新绘制所有内容,但我认为这可能超出了您正在做的事情的范围,无论如何,只有当您看到性能太差时才值得。

此外,您可能需要添加其他成员变量,例如,如果您需要此“当前项目”信息进行绘画。如果是这样,只需添加一个成员变量,并在调用之前将其设置为正确的值repaint()

于 2013-04-11T21:07:47.993 回答