Java 如何实现可比类

Java 如何实现可比类,java,comparable,Java,Comparable,好的,我知道了如何创建GUI类和排序类,但似乎知道了如何实现类似的类。我需要创建随机大小的矩形,然后对它们进行排序。感谢您的帮助,再次感谢 import java.util.*; import java.applet.Applet; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TwoSorts extends Applet implements ActionListener

好的,我知道了如何创建GUI类和排序类,但似乎知道了如何实现类似的类。我需要创建随机大小的矩形,然后对它们进行排序。感谢您的帮助,再次感谢

import java.util.*;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;



public class TwoSorts extends Applet implements ActionListener

{
private final int APPLET_WIDTH = 600;
private final int APPLET_HEIGHT = 600;
Button sort;
Label sort_label;
String pr_name;
int[] random = new int[20];
int[] sorter = new int[20];


public void init()

{

    sort = new Button("Sort");
    add(sort);
    sort.addActionListener(this);
    sort_label = new Label("Orange Selection / Black Bubble");
    add(sort_label);
    randomGen(random);
    sorter = random; 
    setBackground (Color.white);
    setSize (APPLET_WIDTH, APPLET_HEIGHT); 
}  

private void randomGen (int...random) {


    for (int i = 0; i < 20; i++){
        random [i] = (int) (20 +(Math.random()*300-20));
        }
}

public void paint(Graphics g)
{
    for (int i = 0; i < 20; i++ ){


        g.setColor(Color.blue);
        g.fillRect((int) (10 + (i*50)), 300, 50, ((random[i])));
        g.setColor(Color.black);
        g.fillRect((int) (10 + (i*50)), 300, 25, (sorter[i]));
    }

    g.drawRect (20, 30, 130, 50);
  sort.setLocation(0,220);
  sort_label.setLocation(0,270);
  sort_label.setSize(400,30);
}


public void actionPerformed(ActionEvent e) {


    Sorting.selectionSort(random);
    Sorting.insertionSort (sort);
    repaint();

}
}

您的可比较类应该是您正在排序的任何类。在本例中,您正在生成一个随机数组
int
,因此实际上不需要实现
compareTo
,因为
Integer
已经实现了
compareTo
。如果要排序的内容比整数更复杂,您将创建一个新类
width

例如,如果您的小程序有一堆圆圈,它将按大小排序,您将得到如下结果:

public class Circle implements Comparable<Circle> {
    private Point center;
    private double radius;

    public Circle(double radius, Point center) {
        this.center = center;
        this.radius = radius;
    }

    // Other drawing functionality

    public int compareTo(Circle c) {
        if (c.radius > radius) return -1;
        if (c.radius == radius) return 0;
        return 1;
    }
}
公共类循环实现可比性{
私人点中心;
私人双半径;
公共圆(双半径,点中心){
this.center=center;
这个半径=半径;
}
//其他绘图功能
公共整数比较(c圈){
如果(c.radius>radius)返回-1;
如果(c.radius==radius)返回0;
返回1;
}
}

看到了吗?我们的对象更复杂,所以我们需要教Java如何比较一个圆和另一个圆,因为它不知道。

一个
宽度
对象“小于”(或“大于”)意味着什么另一个?您有
class width实现Comparable
,这意味着您希望将两个
width
对象相互比较。因此,如果您声明宽度w1
和宽度w2
。当您对它们进行排序时,您如何确定
w1
是在
w2
之前,还是在
w2
之前?这意味着它们不相等。我的问题是如何让数组的一个实例能够比较它们。我有一个20的数组,我需要比较第1项和第2项,然后是第2项和第3项,等等,每次我点击按钮,我想让它比较下一个设置好,让我们备份。数组中的项目是什么?这些项目是生成gui时生成的20个随机数。20个随机数,我需要对它们进行比较Circle类需要实现
compariable
,以正确获得
comparieto
方法的签名。但是,作为一种比较所有圈子的方式,这有意义吗?这似乎是一个特定于应用程序的需求,因此我将使用
比较器。
    public class width implements Comparable {

int[] random = new int[20];
int[] sorter = new int[20];



@Override
public int compareTo(Object o) {

    int result = 0;

    if(random[1] == sorter[1])
        result = random.length;
    return result;

}
public class Circle implements Comparable<Circle> {
    private Point center;
    private double radius;

    public Circle(double radius, Point center) {
        this.center = center;
        this.radius = radius;
    }

    // Other drawing functionality

    public int compareTo(Circle c) {
        if (c.radius > radius) return -1;
        if (c.radius == radius) return 0;
        return 1;
    }
}