Sortieren von Listen nach Attributen

P

Panda9296

Bekanntes Mitglied
Hi liebe Community,
ich habe ein kleines Problem. Die Aufgabe ist folgende:

  • Gegeben ist die Book Klasse mit den Attributen: tilel, author, preis, seitenzahl
  • Erstelle die Klasse Book oder verwende sie aus der aufgabe „Bibliothek“
  • Buchobjekte sollen nach ihrem Titel sortierbar sein (Comparable, Collections.sort(..))
  • Buchobjekte sollen wahlweise nach ihren Attributen soltierbar sein
    (Comparator, Collections.sort(..))


Gegeben sind Strings mit unterschiedlichen längen
1) sortiere sie aufsteigend nach ihrer Länge (Comparator, Collections.sort(..))

Ich habe versucht diese zu erledigen, habe auch in dem Forum ein wenig geschaut und habe versucht, Methoden zu entwickeln. Jedoch scheitere ich am Aufruf der Sortierungsmethode, wenn ich diese im GUI aufrufen möchte

Code:
Hier ist die Buchklasse die später vielleicht noch durch ein Attribut ergänzt wird(Seitenzahl; ist aber laut mündlicher Aussage nicht nötig)

public class Book {

    
    private String title, author;
    private double price;
    

    public Book(String title, String author, double price) {
    
        this.title = title;
        this.author = author;
        this.price = price;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "[Titel: " + title + ", Autor: " + author + ", Preis: " + price + " € ]";
    }
    
    
    
    
}

Hier kommt die Musik ins Spiel, in der ich versucht habe, die Methoden zu schreiben, wie ich aus Recherchen im Forum und außerhalb des Forums getätigt habe(haben das so noch nicht gemacht)

Code:
package de.bookTwo.Collection.miguel.gutierrez;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;

public class Libary {
    

    ArrayList<Book>books= new ArrayList<>();

    

 
    
    

    public void setBook(Book book) {
        books.add(book);
    
        
    }
    protected String getBook(Book book) {
        for(int i=0;i<books.size();i++) {
                if(book.getTitle().equals(books.get(i).getTitle())&&
                        book.getAuthor().equals(books.get(i).getAuthor())) {
                    return "Das Buch: "+book.toString()+" befindet sich auf Position: "+books.get(i);
                }
        
        }
        return "Das Buch "+book+"  befindet sich nicht in der Liste";
    }

    public void removeBook(Book book) {
        
        for(int i=0;i<books.size();i++) {
            
            if(books.get(i).equals(book)) {
                books.remove(i);
            }
        }   
    }



    protected int entireSum() {
        return books.size();   
    }
    
    protected double entireBook() {
        double sum=0.0;
        for(int i=0;i<books.size();i++) {       
            sum = sum+books.get(i).getPrice();
            
        }return sum;
    }
    protected void sortTitle() {
        Collections.sort(books,BY_TITLE);
    }
    protected void sortAuthor() {
        Collections.sort(books,BY_AUTHOR);
    }
    protected void sortPrice() {
        Collections.sort(books,BY_PRICE);
    }
    protected static final Comparator<Book>BY_TITLE=new Comparator<Book>() {
        public int compare(Book first,Book secound) {
            return doCompare(first.getTitle(),secound.getTitle());
        }
    };
    protected static final Comparator<Book>BY_AUTHOR=new Comparator<Book>() {
        public int compare(Book first,Book secound) {
            return doCompare(first.getAuthor(),secound.getAuthor());
        }
    };
    protected static final Comparator<Book>BY_PRICE=new Comparator<Book>() {
        public int compare(Book first,Book secound) {
            return doCompare(first.getPrice(),secound.getPrice());
        }
    };
    private static <T extends Comparable<? super T>> int doCompare(T t0, T t1)
    {
        if (t0 == null)
        {
            if (t1 == null)
            {
                return 0;
            }
            return 1;
        }
        if (t1 == null)
        {
            return -1;
        }
        return t0.compareTo(t1);
    }
    
    
    @Override
    public String toString() {
        return "Libary [books=" + books + "]";
    }
    
    

}
Die Final methoden sind eigentlich dafür gedacht um die Methoden wie sortTitle() zum Beispiel aufzurufen.

Code:
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.event.ActionEvent;

import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Timer;
import javax.swing.JList;

public class GUI extends JFrame {

    private JPanel contentPane;
    private JTextField textAuthor;
    private JTextField textTitle;
    private JTextField textPrice;
    JLabel view;
    int lblTextLength=0;
    Timer timer;
    int counter=0;
    Libary libary= new Libary();

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    GUI frame = new GUI();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public GUI() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 800, 600);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        textAuthor = new JTextField();
        textAuthor.setBounds(21, 107, 94, 20);
        contentPane.add(textAuthor);
        textAuthor.setColumns(10);
        textAuthor.setText("Author");
        
        
        JLabel lblNewLabel = new JLabel("Bilbliothek");
        lblNewLabel.setFont(new Font("Vivaldi", Font.BOLD | Font.ITALIC, 30));
        lblNewLabel.setBounds(21, 27, 366, 29);
        contentPane.add(lblNewLabel);
        
        JLabel lblNewLabel_1 = new JLabel("Buch:");
        lblNewLabel_1.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 15));
        lblNewLabel_1.setBounds(21, 67, 141, 29);
        contentPane.add(lblNewLabel_1);
        
        textTitle = new JTextField();
        textTitle.setBounds(21, 138, 94, 20);
        contentPane.add(textTitle);
        textTitle.setColumns(10);
        textTitle.setText("Titel des Buches");
        
        textPrice = new JTextField();
        textPrice.setBounds(21, 169, 94, 20);
        contentPane.add(textPrice);
        textPrice.setColumns(10);
        textPrice.setText("0.00");
        
        JButton btnNewButton = new JButton("Buch suchen");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String author= textAuthor.getText();
                String title=  textTitle.getText();
                String priceS= textPrice.getText();
                double price = Double.parseDouble(priceS);
                Book book = new Book(author,title,price);
                view.setText("<html>"+libary.getBook(book)+"</htlm>");
                
                
            }
        });
        btnNewButton.setBounds(21, 261, 163, 34);
        contentPane.add(btnNewButton);
        
        JButton btnBookAdd = new JButton("Buch hinzuf\u00FCgen");
        btnBookAdd.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                String author= textAuthor.getText();
                String title=  textTitle.getText();
                String priceS= textPrice.getText();
                try {
                    double price = Double.parseDouble(priceS);
                    Book book = new Book(author,title,price);
                    libary.setBook(book);
                    view.setText("Das Buch "+title+" wurde erfolgreich hinzugefügt");   
                }catch(NumberFormatException notDouble){
                    view.setText("Der Preis muss nach dem Muster 0.00 € angelegt werden");
                }catch(ArrayIndexOutOfBoundsException notDouble) {
                    view.setText("Der Preis muss nach dem Muster 0.00 € angelegt werden");
                }
                
            }
        });
        btnBookAdd.setBounds(21, 216, 163, 34);
        contentPane.add(btnBookAdd);
        
        view =new JLabel("Anzeige!");
        view.setBounds(217, 211, 425, 224);
        contentPane.add(view);
        
    
        
        JButton btnshowEntire = new JButton("Gesamtbestand anzeigen");
        btnshowEntire.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            view.setText("<html>Der Gesamwert der Bücher beträgt "+ libary.entireBook()+" €</html>");
            
            }
            
        });
        btnshowEntire.setBounds(21, 449, 163, 34);
        contentPane.add(btnshowEntire);
        
        JButton btnSortTitle = new JButton("Sortieren n. Titel");
        btnSortTitle.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                view.setText("<html>"+libary.sortTitle());
            }
        });
        btnSortTitle.setBounds(21, 306, 163, 34);
        contentPane.add(btnSortTitle);
        
        JButton btnNewButton_2 = new JButton("Sortieren n. Author");
        btnNewButton_2.setBounds(21, 351, 163, 34);
        contentPane.add(btnNewButton_2);
        
        JButton btnNewButton_3 = new JButton("Sortieren n. Preis");
        btnNewButton_3.setBounds(21, 396, 163, 34);
        contentPane.add(btnNewButton_3);
    }
}
Die Buttons 2 / 3 werden namendlich natürlich noch angepasst. folgendes wird als Fehlermeldung interpretiert:

Code:
view.setText("<html>"+libary.sortTitle());

Vielleicht weil ich keinen String zurück liefere? Aber was müsste ich den dann hier machen^^. Sorry ich sitze schon eine Weile dran

Fehlermeldung von der Console bei ButtonClick:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem:
    The operator + is undefined for the argument type(s) String, void
Die mich noch ein wenig verwirrt. Habe ich die Methoden falsch geschrieben? Ein Guide wäre vielleicht zur Erklärung sehr gut ^^ möchte das können.. Denke sowas braucht man immer^^ Ich danke der Community
 
H

handshake45

Bekanntes Mitglied
view.setText("<html>"+libary.sortTitle());
also das Problem ist hier, sortTitle ist eine Methode, die die library nach Titeln sortiert und keine Rückgabe hat, und "..." ist eine Zeichenkette, die nicht mit einem Methodenaufruf konkateniert werden kann.

Versuch mal:
libary.sortTitle();
view.setText("<html>"+libary);

Zu den anderen Aufgaben bekommst du bestimmt hin. ;)
 
P

Panda9296

Bekanntes Mitglied
also das Problem ist hier, sortTitle ist eine Methode, die die library nach Titeln sortiert und keine Rückgabe hat, und "..." ist eine Zeichenkette, die nicht mit einem Methodenaufruf konkateniert werden kann.

Versuch mal:
libary.sortTitle();
view.setText("<html>"+libary);

Zu den anderen Aufgaben bekommst du bestimmt hin. ;)
Ja hat natürlich funktioniert ich war wegen der geschriebenen Memberklasse verunsichert^^
 
H

handshake45

Bekanntes Mitglied
Mein Verdacht ist du suchst so etwas:
Java:
	public static void main(String[] args) {
		ArrayList<Buch> arrayList = new ArrayList<Buch>();
		arrayList.add(new Buch("Carlo Collodi", "Pinocchio", 189));
		arrayList.add(new Buch("J. R. R. Tolkien", "Der Herr der Ringe", 1344));
		arrayList.add(new Buch("Verlag Herder", "Hausbibel", 1560));
		Collections.sort(arrayList, new GenericAttributeNameComparator<Buch>("autor", false));
		arrayList.forEach(System.out::println);
		System.out.println("");
		Collections.sort(arrayList, new GenericAttributeNameComparator<Buch>("titel", true));
		arrayList.forEach(System.out::println);
		System.out.println("");
		Collections.sort(arrayList, new GenericAttributeNameComparator<Buch>("seiten", true));
		arrayList.forEach(System.out::println);
		System.out.println("");
	}
}

class Buch {
	String autor, titel;
	Integer seiten;

	public Buch(String autor, String titel, Integer seiten) {
		this.autor = autor;
		this.titel = titel;
		this.seiten = seiten;
	}

	public String getAutor() {
		return autor;
	}

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

	public String getTitel() {
		return titel;
	}

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

	public Integer getSeiten() {
		return seiten;
	}

	public void setSeiten(Integer seiten) {
		this.seiten = seiten;
	}

	@Override
	public String toString() {
		return String.format("Buch [autor=%s, titel=%s, seiten=%s]", autor, titel, seiten);
	}
}

class GenericAttributeNameComparator<T> implements Comparator<T> {
	private String attributeName;
	private boolean natural;

	public GenericAttributeNameComparator(String attributeName, boolean natural) {
		this.attributeName = attributeName;
		this.natural = natural;
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public int compare(T o1, T o2) {
		try {
			Comparable c1 = (Comparable) o1.getClass().getDeclaredField(attributeName).get(o1);
			Comparable c2 = (Comparable) o2.getClass().getDeclaredField(attributeName).get(o2);
			if (natural) {
				return c1.compareTo(c2);
			} else {
				return c2.compareTo(c1);
			}
		} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException
				| ClassCastException e) {
			e.printStackTrace();
		}
		return 0;
	}
}
Die Attribute können auch private sein (dann über die Getter). Sorry für den Deutsch Englisch Mix...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Listen Objekte nach LocalDateTime sortieren Java Basics - Anfänger-Themen 2
G 2 Listen kombinieren und nach abc sortieren Java Basics - Anfänger-Themen 9
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
I Listen sortieren bei mehreren Listen zu einer Java Basics - Anfänger-Themen 2
G Listen sortieren Java Basics - Anfänger-Themen 3
T Listen sortieren Java Basics - Anfänger-Themen 4
H Sortieren von Listen Java Basics - Anfänger-Themen 8
M kompliziertes Problem mit Listen sortieren Java Basics - Anfänger-Themen 5
N sortieren zweier abhängiger array listen Java Basics - Anfänger-Themen 12
C Sortieren einer ArrayList Java Basics - Anfänger-Themen 2
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
DorFey Sortieren eines mehrdimensionalen Arrays Java Basics - Anfänger-Themen 8
W Personen sortieren mit Comparator Java Basics - Anfänger-Themen 9
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
S Streams - Abfrage absteigend sortieren Java Basics - Anfänger-Themen 11
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
L Array sortieren Java Basics - Anfänger-Themen 4
L Java Int-Array, Zahlen sortieren Java Basics - Anfänger-Themen 8
T Java: Array monat absteigend sortieren? Java Basics - Anfänger-Themen 1
B Liste sortieren? Java Basics - Anfänger-Themen 4
P Array Sortieren mit boolean? Java Basics - Anfänger-Themen 33
scratchy1 Array sortieren und dann String-Repräsentation ausgeben Java Basics - Anfänger-Themen 2
O Arrays sortieren in einer Methode Java Basics - Anfänger-Themen 2
E Methoden 2 Arrays sortieren (MergeSort) Java Basics - Anfänger-Themen 3
B Suchen und sortieren Java Basics - Anfänger-Themen 10
F Zahlen im Feld sortieren + Unterprogramm Java Basics - Anfänger-Themen 4
O Zweidimensional Array sortieren Java Basics - Anfänger-Themen 14
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
UnknownInnocent Variablen Teile eines Arrays zufällig sortieren Java Basics - Anfänger-Themen 7
K Methoden Array[][] sortieren Java Basics - Anfänger-Themen 30
UnknownInnocent Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
E ArrayList sortieren Java Basics - Anfänger-Themen 16
L Methode zum sortieren Java Basics - Anfänger-Themen 1
L Methode zum sortieren Java Basics - Anfänger-Themen 1
B Sortieren mit Iterator Java Basics - Anfänger-Themen 4
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14
A Sortieren ausgerechneter Werte aus einer TXT Datei Java Basics - Anfänger-Themen 8
E LMC (Assembler) Sortieren von 3 Zahlen Java Basics - Anfänger-Themen 4
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
A Array sortieren Java Basics - Anfänger-Themen 1
N StringArray alphabetisch sortieren Java Basics - Anfänger-Themen 4
Tommy135 Erste Schritte JavaDoc Sortieren Java Basics - Anfänger-Themen 5
R Winkel berechnen bzw. Geraden sortieren Java Basics - Anfänger-Themen 33
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
D Arraylisten sortieren bitte um Hilfe Java Basics - Anfänger-Themen 4
informatikschüler21 String im Array sortieren Java Basics - Anfänger-Themen 4
U Methoden Zweidimensionales Array mit Arrays.sort sortieren? Java Basics - Anfänger-Themen 22
M Arrays sortieren und kleinster Abstand Java Basics - Anfänger-Themen 3
N TreeMap alphabetisch sortieren? Java Basics - Anfänger-Themen 3
I <List> sortieren Java Basics - Anfänger-Themen 2
F Interface Nach mehreren Kriterien sortieren Java Basics - Anfänger-Themen 2
R Objekte Vergleichen und Sortieren Java Basics - Anfänger-Themen 3
I Sortieren nach Priorität Java Basics - Anfänger-Themen 3
S List<T<X,Y> sortieren Java Basics - Anfänger-Themen 5
W Array sortieren Java Basics - Anfänger-Themen 3
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
Alex/89 Werte einer .txt Datei sortieren Java Basics - Anfänger-Themen 8
N Bubble Sort sortieren mit Int Werte Java Basics - Anfänger-Themen 8
N Collection sortieren/ filtern Java Basics - Anfänger-Themen 7
C Methoden Einfach verkette Liste - int Werte aufsteigend sortieren Java Basics - Anfänger-Themen 1
S array sortieren Java Basics - Anfänger-Themen 7
D Array mit Zufallszahlen, dann sortieren: Hilfe gesucht! Java Basics - Anfänger-Themen 1
D Methoden int-Array absteigend sortieren Java Basics - Anfänger-Themen 8
C Chars in einem String alphabetisch sortieren Java Basics - Anfänger-Themen 1
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 5
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
J Sortieren Java Basics - Anfänger-Themen 21
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
H Strings vergleichen & sortieren Java Basics - Anfänger-Themen 20
J Ungewolltes Sortieren eines Arrays Java Basics - Anfänger-Themen 4
T Collections Sortieren von Automodellen (v.a. BMW und Mercedes) Java Basics - Anfänger-Themen 3
P Liste sortieren verschiedener generischer Typen Java Basics - Anfänger-Themen 4
D Erste Schritte array aufsteigend sortieren und ausgeben Java Basics - Anfänger-Themen 17
K Probleme mit Sortieren und dem Zählen Java Basics - Anfänger-Themen 13
B Sortieren und Filtern von Tabellen Java Basics - Anfänger-Themen 6
C Werte im Array sortieren Java Basics - Anfänger-Themen 5
J Liste der Größe nach sortieren Java Basics - Anfänger-Themen 2
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
I Hilfe bei Sortieren von Arrays Java Basics - Anfänger-Themen 1
C Methoden Sortieren mit Streams: Auf- und absteigend Java Basics - Anfänger-Themen 2
S CSV File - "Vergleichen und Sortieren" Java Basics - Anfänger-Themen 3
J Interface Bubblesort soll Arrays beliebiger Referenztypen sortieren können. Java Basics - Anfänger-Themen 5
A Input/Output 2-dimensionales array sortieren Java Basics - Anfänger-Themen 3
A Wie am effizientesten bzw. schnellsten Namen/Wörter sortieren? Java Basics - Anfänger-Themen 1
J Array nach häufigkeit sortieren Java Basics - Anfänger-Themen 4
C Objekte mit Parametern sortieren Java Basics - Anfänger-Themen 8
S Strings im Array nach Namen sortieren Java Basics - Anfänger-Themen 11
J TreeSet mit compareTo sortieren Java Basics - Anfänger-Themen 2
T ArrayList (Zahlen) aufsteigend sortieren mit Duplikaten Java Basics - Anfänger-Themen 8
E Array sortieren, es will nicht Java Basics - Anfänger-Themen 6
S String nach Größe sortieren Java Basics - Anfänger-Themen 6
P Liste nach Datum sortieren Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Anzeige

Neue Themen


Oben