Potrzebuje podpowiedzi w sprawie interfejsu comparable....

0

Mam prosty program w którym mam użyć interfejsu Comparable do sortowania
obiektów, Metodę dodającą należy użyć do
porównywania ze sobą obiektów klasy Suma w metodzie z interfejsu
Comparable. Kod źródłowy który napisałem:
Nie wiem jak użyć w metodzie porównującej metodę suma() ????

public class Suma implements Comparable {

    private double a;
    private double b;

    public Suma(double a, double b) {
        this.a = a;
        this.b = b;
    }
    public double suma() {

        double wynik;
        wynik = a + b;
        return wynik;
    }
    public String toString() {
        String wynik = "";
        wynik = "Wartośc A = "+a+", wartość B = "+b+", ich suma = "+suma();
        return  wynik;
    }


    @Override
    public int compareTo(Object o) {
        return 0;
    }
}
public class TestSumy {

    public static void main(String []args) {

        Suma[] sumuwanko = new Suma[4];
        sumuwanko[0] = new Suma(2.3,3.4);
        sumuwanko[1] = new Suma(3.2,4.1);
        sumuwanko[2] = new Suma(2.2, 3.3);
        sumuwanko[3] = new Suma(1.2,3.5);

        for (Suma s:sumuwanko) {
            System.out.println(s+", ");
        }
        Arrays.sort(sumuwanko);
        System.out.println();
        for (Suma s:sumuwanko) {
            System.out.println(s+", ");
        }

    }
}

Treść zadania:
Napisz klasę Suma implementującą interfejs Comparable. Klasa ma
posiadać dwa pola prywatne typu double: WartA i WartB inicjalizowane
za pomocą konstruktora. Klasa ma posiadać również metodę publiczną
wyliczającą sumę WartA i WartB oraz metodę toString()
wyprowadzającej pola i ich sumę. Metodę dodającą należy użyć do
porównywania ze sobą obiektów klasy Suma w metodzie z interfejsu
Comparable. Ponadto napisz klasę TestSumy z użyciem tablicy
obiektów klasy Suma oraz metody Arrays.sort (pakiet java.util).

0

Dla takich klas:

public class Suma implements Comparable<Suma> {

			private double a;
			private double b;

			public Suma(double a, double b) {
			    this.a = a;
			    this.b = b;
			}
			public double suma() {
			    return a+b;
			}
			public String toString() {
				return "Wartośc A = "+a+", wartość B = "+b+", ich suma = "+suma();
			}

			@Override
			public int compareTo(Suma o) {
			     return o.suma() > this.suma() ? 1 : o.suma() < this.suma() ? -1 : 0;
			}

}
```			
```java
import java.util.Arrays;

public class TestSumy {

	public static void main(String []args) {

	    Suma[] sumuwanko = new Suma[4];
	    sumuwanko[0] = new Suma(2.3,3.4);
	    sumuwanko[1] = new Suma(3.2,4.1);
	    sumuwanko[2] = new Suma(2.2, 3.3);
	    sumuwanko[3] = new Suma(1.2,3.5);

	    for (Suma s:sumuwanko) {
	        System.out.println(s+", ");
	    }
	    Arrays.sort(sumuwanko);
	    System.out.println();
	    for (Suma s:sumuwanko) {
	        System.out.println(s+", ");
	    }
	}
}

wynikiem jest:

Wartośc A = 2.3, wartość B = 3.4, ich suma = 5.699999999999999,
Wartośc A = 3.2, wartość B = 4.1, ich suma = 7.3,
Wartośc A = 2.2, wartość B = 3.3, ich suma = 5.5,
Wartośc A = 1.2, wartość B = 3.5, ich suma = 4.7,

Wartośc A = 3.2, wartość B = 4.1, ich suma = 7.3,
Wartośc A = 2.3, wartość B = 3.4, ich suma = 5.699999999999999,
Wartośc A = 2.2, wartość B = 3.3, ich suma = 5.5,
Wartośc A = 1.2, wartość B = 3.5, ich suma = 4.7,

Nie wiem tylko jak to będzie wyglądać dla double bardzo zbliżonych do siebie - compareTo() zwraca inta.
EDIT:
Edytowałem, zgodnie z tą odpowiedzią na SO

0

Spróbowałam tego rozwiązania i wywala mi błąd, w dodatku powinno być posortowane rosnąco względem sumy....

0

@andrzejK: U mnie działa. Pokaż jaki błąd. Widziałeś edycję?

w dodatku powinno być posortowane rosnąco względem sumy....

Gotowca nie dostaniesz.

0

cannot resolve method suma()...

0

screenshot-20170322190817.png

1

@andrzejK: zamień

public int compareTo(Object o) ...

na

public int compareTo(Suma o) ...

Nie patrzysz na to co Ci dałem. Przyjrzyj się bo dostałeś gotowca jak nic.

1 użytkowników online, w tym zalogowanych: 0, gości: 1