Hi liebe Community,
ich habe ein kleines Problem. Die Aufgabe ist folgende:
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
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)
Die Final methoden sind eigentlich dafür gedacht um die Methoden wie sortTitle() zum Beispiel aufzurufen.
Die Buttons 2 / 3 werden namendlich natürlich noch angepasst. folgendes wird als Fehlermeldung interpretiert:
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:
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
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 + "]";
}
}
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);
}
}
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