compareTo für 3 Strings

walter911

Mitglied
Hallo,
ich möchte 3 Strings sortieren und dann abstiegend ausgeben. Für 2 ist das kein Problem.
Kann mir jemand ein Programm geben oder mir zumindest sagen wie ich es für 3 hinbekomme?

Java:
public class Main {

    public static void main(String[] args)
  {

    String string1 =  "aaaa";
    String string2 =  "aaab";
        int i = string1.compareTo(string2);

    if(i<0)
      System.out.println(string2 + string1);  //es wird erst der größere String ausgegeben
    else if(i>0)
      System.out.println(string1 + string2);  //es wird erst der kleinre String ausgegeben
    else
      System.out.println(string1 + string2); //egal welcher zuerst ausgegeben wird da beide gleich
}
}
 
Collections.reverse(list) nachdem sie sortiert ist, oder den Collator so überschreiben, dass er umgekehrt sortiert (minus den normaler Wert zurückgibt in der compare) und dann Collections.sort(list, new ReverseCollator())

EDIT:
geht sogar noch einfacher mit Collections.reverseOrder:
Java:
Collator co = Collator.getInstance();

Comparator<Object> reverse = Collections.reverseOrder(co);

List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("zzz");

Collections.sort(list, reverse);
for(String s : list) {
	System.out.println(s);
}
 
Zuletzt bearbeitet:
ich möchte 3 Strings sortieren und dann abstiegend ausgeben
Noch eine Möglichkeit 😀 :
Java:
if (string1.compareTo(string2) >= 0) {
    if (string2.compareTo(string3) >= 0) {
        System.out.println(string1 + string2 + string3);
    } else if (string1.compareTo(string3) >= 0) {
        System.out.println(string1 + string3 + string2);
    } else {
        System.out.println(string3 + string1 + string2);
    }
} else {
    if (string3.compareTo(string2) >= 0) {
        System.out.println(string3 + string2 + string1);
    } else if (string3.compareTo(string1) >= 0) {
        System.out.println(string2 + string3 + string1);
    } else {
        System.out.println(string2 + string1 + string3);
    }
}
 
danke das mit den ifs würde sicher auch funktionieren aber ich hab die andere Möglichkeit schon benutzt.

Was ist eigentlich wenn ich 3 Elemente nach dem Muster "Titel, Autor, ISBN, Preis" habe und jetzt Autor sortieren möchte allerdings als ausgabe nur den Titel will?

Eben hab ich nach Titel sortiert und da ist die Ausgabe dann Titel. Das ist ja die Funktion die mir hier erklärt wurde. Aber was jetzt wenn nach Autor sortiert wird aber die Titel in der (nach autor sortierten) Reihenfolge ausgegeben werden sollen
 
Da du ja, wie ich das bisher mitbekommen habe, die Elemente am Ende in einer List sortiert vorliegen hast, kannst du diese doch einfach durchlaufen und dann die entsprechende getMethode für z.B. den Titel aufrufen und diesen dann ausgeben.
Java:
for(Element e : elements){
    System.out.println(e.getTitle());
}
 
Da du ja, wie ich das bisher mitbekommen habe, die Elemente am Ende in einer List sortiert vorliegen hast, kannst du diese doch einfach durchlaufen und dann die entsprechende getMethode für z.B. den Titel aufrufen und diesen dann ausgeben.
Java:
for(Element e : elements){
    System.out.println(e.getTitle());
}

Das hab ich noch nicht ganz verstanden.
Kannst du mir genauer sagen wie ich das machen muss?


Eben ist mir beim nochmaligen durchlesen der Aufgabenstellugn aufgefallen, das alle Ausgaben mit JOptionPane.showMessageDialog erfolgen müssen.

Java:
Collections.sort(titellist);
for(String s : titellist) {
//System.out.println(s);
JOptionPane.showMessageDialog(null, s);
Es funktioniert auch. Allerdings kommen hintereinander 3 MessageDialoge. Könnte man das auch so hinbekommen das alles in einem angezeigt wird?
Edit: Eigener Lösungsvorschlag zu der Sache mit dem messagedialog. titellist.get(0) bis 3 müsste doch dafür die passende Funktion sein oder
 
Zuletzt bearbeitet:
Da gibt es eigentlich nicht mehr viel zu erklären.
Es geht ja anscheinend darum Bücher zu sortieren, ich versuchs mit nem anderen Beispiel:
Java:
for(Buch b : buchListe){
   System.out.println(b.getTitle());
}
Die Liste von Büchern wird durchlaufen. Du holst dir eines nach dem anderen aus der Liste, fragst dann mit getTitle() den Titel ab und gibst diesen danach auf der Konsole aus.
 
Versuch's mal so:
Java:
...
        Collections.sort(list, new Comparator<Buch>() {

            public int compare(Buch b1, Buch b2) {
                return b1.getAutor().compareTo(b2.getAutor()) * -1;
            }
        });
        StringBuilder out = new StringBuilder();
        for (Buch buch : list) {
            out.append(buch.getTitel());
            out.append("\n");
        }
        JOptionPane.showMessageDialog(null, out.toString());
...
Java:
class Buch {

    private String titel;
    private String autor;
    private String isbn;
    private double preis;

    public Buch(String titel, String autor, String isbn, double preis) {
        this.titel = titel;
        this.autor = autor;
        this.isbn = isbn;
        this.preis = preis;
    }

    public String getAutor() {
        return autor;
    }

    public void setAutor(String autor) {
        this.autor = autor;
    }

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public double getPreis() {
        return preis;
    }

    public void setPreis(double preis) {
        this.preis = preis;
    }

    public String getTitel() {
        return titel;
    }

    public void setTitel(String titel) {
        this.titel = titel;
    }

    @Override
    public String toString() {
        return "Titel=" + titel + ", Autor=" + autor + ", ISBN=" + isbn + ", Preis=" + preis;
    }
}
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben