Как реализовать сопоставимый класс

Хорошо, я понял, как создать класс 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();

}
}

Вот мой класс сортировки

    import java.awt.event.ActionEvent;


 public class Sorting{

    public static void selectionSort (Comparable[] list)    {

        int min;
        Comparable temp;

        for (int index = 0; index < list.length-1; index++)
        {
            min = index;
            for (int scan = index+1; scan < list.length; scan++)
                if (list[scan].compareTo(list[min]) < 0)
                    min = scan;

            temp = list[min];
            list[min] = list[index];
            list[index] = temp;
        }
    }

    public static void insertionSort (Comparable[] sorter)  {

        for (int index = 1; index < sorter.length; index ++){
            Comparable key = sorter[index];
            int position = index;
            while (position > 0 && key.compareTo(sorter[position-1]) < 0){
                sorter [position] = sorter[position-1];
                position--;
            }

            sorter[position] = key;
        }
    }

И вот мой сопоставимый класс, где мне нужна помощь

    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;

}

person blankwall    schedule 06.11.2012    source источник
comment
Что означает, что один объект width меньше (или больше) другого?   -  person Code-Apprentice    schedule 06.11.2012
comment
У вас есть class width implements Comparable, что означает, что вы хотите сравнить два объекта width друг с другом. Итак, если вы объявите width w1 и width w2. Как вы решаете, стоит ли w1 перед w2 или наоборот, когда вы их сортируете?   -  person Code-Apprentice    schedule 06.11.2012
comment
Это означает, что они не будут равны. Мой вопрос заключается в том, как получить один экземпляр моего массива, чтобы иметь возможность сравнивать их. У меня есть массив из 20, и мне нужно сравнить элемент 1 и 2, затем 2 и 3 и т. д. и т. д. каждый раз, когда я нажимаю кнопку, я хочу, чтобы он сравнивал следующий набор   -  person blankwall    schedule 06.11.2012
comment
хорошо, давайте резервную копию. Какие элементы в вашем массиве?   -  person Code-Apprentice    schedule 06.11.2012
comment
Элементы представляют собой 20 случайных чисел, сгенерированных при создании графического интерфейса. 20 случайных чисел и мне нужно их сравнить   -  person blankwall    schedule 06.11.2012
comment
Оба ваших алгоритма сортировки уже имеют код, который сравнивает один элемент в массиве с другим элементом в массиве. Например, key.compareTo(sorter[position-1]) в вашем insertionSort().   -  person Code-Apprentice    schedule 06.11.2012
comment
давайте продолжим это обсуждение в чате   -  person Code-Apprentice    schedule 06.11.2012
comment
Но как мне создать сопоставимый класс, чтобы разрешить эту сортировку. Я чувствую себя очень потерянным из-за всей этой установки   -  person blankwall    schedule 06.11.2012
comment
Эй, гуру кода, у меня все заработало, но у меня есть еще один быстрый вопрос, возможно, вы могли бы помочь. электронная почта [email protected]   -  person blankwall    schedule 08.11.2012
comment
Пожалуйста, разместите новый вопрос здесь, на Stackoverflow.com, чтобы другие могли внести свой вклад. Кроме того, это сделает информацию доступной для всех, у кого возникнет аналогичная проблема в будущем.   -  person Code-Apprentice    schedule 09.11.2012


Ответы (1)


Ваш сопоставимый класс должен быть тем, что вы сортируете. В этом случае вы генерируете случайный массив 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;
    }
}

Понимаете? Наш объект более сложный, поэтому нам нужно научить Java сравнивать один круг с другим, потому что он этого не знает.

person durron597    schedule 06.11.2012
comment
Класс Circle должен реализовать Comparable<Circle>, чтобы получить правильную сигнатуру метода compareTo. Но имеет ли смысл сравнивать все круги? Кажется, это требование для конкретного приложения, поэтому вместо этого я бы использовал Comparator<Circle>. - person Eric Jablow; 21.04.2013