import java.util.Collections; import java.util.LinkedList; import java.util.List; public class Prisma implements Comparable { private Grundflaeche basis; private int hoehe; public Prisma(Grundflaeche basis, int höhe) { this.basis = basis; this.hoehe = höhe; } public Grundflaeche getBasis() { return basis; } public int getHoehe() { return hoehe; } public double oberflaeche() { return hoehe * basis.umfang() + 2 * basis.flaeche(); } public double volumen() { return hoehe * basis.flaeche(); } // public boolean istWuerfel() { // if (!basis.istQuadrat()) // return false; // return hoehe == basis.zuQuadrat().getLaenge(); // } @Override public int compareTo(Prisma o) { // Hinweise: siehe Grundflaeche.compareTo(o) if (o == null) // würde sonst unten auftreten (so ist es schöner) throw new NullPointerException("Prisma wurde mit null verglichen."); // Standardmäßg: // return (int) (this.volumen()- o.volumen()); // Da dadurch aber bspw. 0.2 auch 0 wäre und wir nicht gegen das // vorgeschlagene Schema verstoßen wollen, lösen wir es z. B. so: double result = this.volumen() - o.volumen(); if (result == 0) return 0; // equals == true else if (result < 1 && result > -1) { // -> würde zu 0 werden if (result < 0) return -1; else return +1; } else return (int) result; } @Override public String toString() { return "Prisma{basis=" + basis + "; hoehe=" + hoehe + "; volumen=" + volumen() + "; oberflaeche=" + oberflaeche() + "}"; } public static void main(String[] args) { // Testen: java.util.Random zufallsgen = new java.util.Random(); List grundflaechen = new LinkedList(); List prismen = new LinkedList<>(); for (int i = 0; i < 100; i++) { Grundflaeche neu; if (i % 2 == 0) neu = new Quadrat(zufallsgen.nextInt(20)); else neu = new Kreis(zufallsgen.nextInt(10)); grundflaechen.add(neu); prismen.add(new Prisma(neu, zufallsgen.nextInt(10))); } Collections.sort(grundflaechen); Collections.sort(prismen); StringBuilder sb = new StringBuilder(); sb.append("Grundflächen:"); for (Grundflaeche g : grundflaechen) { sb.append(g); sb.append("\n"); } sb.append("\nPrismen:"); for (Prisma p : prismen) { sb.append(p); sb.append("\n"); } System.out.println(sb); try { Grundflaeche a = new Quadrat(5); System.out.println(".compareTo(null) liefert " + a.compareTo(null) + "."); } catch (NullPointerException e) { System.out.println("Erfolg: .compareTo(null) -> " + e.getClass().getSimpleName() + ": " + e.getMessage()); } try { Prisma a = new Prisma(new Quadrat(5), 6); System.out.println("Fehler: .compareTo(null) liefert " + a.compareTo(null) + "."); } catch (NullPointerException e) { System.out.println("Erfolg: .compareTo(null) -> " + e.getClass().getSimpleName() + ": " + e.getMessage()); } } }