Java 如何将数组外的每个元素表示为一条线

Java 如何将数组外的每个元素表示为一条线,java,sorting,line,paint,java-canvas,Java,Sorting,Line,Paint,Java Canvas,此应用程序对一个数组进行排序。希望用一行相等的值表示更改的当前项。 我不知道我将把paint方法(或draw)放在哪里来绘制我的当前项,因为方法“run()”不能 class sortareBubbleSort extends Canvas implements Runnable{ Dimension dim = new Dimension (300 , 300) ; public Dimension getPreferredSize () { return

此应用程序对一个数组进行排序。希望用一行相等的值表示更改的当前项。 我不知道我将把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);
                }
            }
        }
    }
类sortareBubbleSort扩展画布实现可运行{
尺寸标注=新尺寸(300300);
公共维度getPreferredSize(){
返回暗淡;
}
公共空间涂料(图g){
g、 设置颜色(颜色为黑色);
g、 drawRect(0,0,尺寸宽度-1,尺寸高度-1);
}
//公共空间更新(图g){
//油漆(g);}
整数nre,最小值,最大值;
公共sortareBubbleSort(int-nre、int-min、int-max){
这个。nre=nre;
这个.min=min;
这个。max=max;
}
公开募捐{
int[]x=新的int[nre];

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

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
    }
}
int nre,min,max;
int[] x; //added, leave to default value null 
要使其工作,
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
    }
}
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
然后在内部循环中,用call to替换
g.drawLine()
call simply


您可以优化绘图,这样就不会每次都重新绘制所有内容,但我认为这可能超出了您正在做的工作范围,而且无论如何,只有在您看到性能太差的情况下,这才是值得的


此外,如果您需要此“当前项”信息进行绘制,则可能需要添加其他成员变量。如果需要,只需添加一个成员变量,并将其设置为正确值,然后再调用
repaint()

下次,请在不使用制表符的情况下重新缩进代码(这是一个例子,说明了为什么您应该让编辑器将选项卡转换为空格,以避免这样的混乱),添加一些空行。最后,但最重要的是,你的问题是什么?我想画一条与当前元素值相等的线,这非常有意义。@user2248861你的意思是,你想在每次交换后更新画布吗?然后这样做。你不能只画一个元素。所有的绘制都在那个绘制方法中。