Schleife zur abfrage des preises und alphabetische abfrage des namen

Johnny8519

Mitglied
public static void main(String[] args) {
String a = JOptionPane.showInputDialog("Bitte geben Sie den Titel des ersten Buches ein");
String b = JOptionPane.showInputDialog("Bitte geben Sie den Autor des ersten Buches ein");
String c = JOptionPane.showInputDialog("Bitte geben Sie die ISBN Nummer des ersten Buches ein");
String d = JOptionPane.showInputDialog("Bitte geben Sie den Preis des ersten Buches ein");
int e = Integer.parseInt(c);
double f = Double.parseDouble(d);
Book book = new Book(a,b,e,f);
String g = JOptionPane.showInputDialog("Bitte geben Sie den Titel des zweiten Buches ein");
String h = JOptionPane.showInputDialog("Bitte geben Sie den Autor des zweiten Buches ein");
String i = JOptionPane.showInputDialog("Bitte geben Sie die ISBN Nummer des zweiten Buches ein");
String j = JOptionPane.showInputDialog("Bitte geben Sie den Preis des zweiten Buches ein");
int k = Integer.parseInt(i);
double l = Double.parseDouble(j);
Book book2 = new Book(g,h,k,l);
String m = JOptionPane.showInputDialog("Bitte geben Sie den Titel des zweiten Buches ein");
String n = JOptionPane.showInputDialog("Bitte geben Sie den Autor des zweiten Buches ein");
String o = JOptionPane.showInputDialog("Bitte geben Sie die ISBN Nummer des zweiten Buches ein");
String p = JOptionPane.showInputDialog("Bitte geben Sie den Preis des zweiten Buches ein");
int q = Integer.parseInt(o);
double r = Double.parseDouble(p);
Book book3 = new Book(m,n,q,r);
String sortierung = javax.swing.JOptionPane.showInputDialog
("Nach was sollen die Bücher sortiert werden?\r Titel=1,Autor=2,ISBN=3,Preis=4");
int x = Integer.parseInt (sortierung);


neue klasse

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

public Book (String name, String autor, int isbn, double preis) {
this.titel = titel;
this.autor = autor;
this.isbn = isbn;
this.preis = preis;

soweit bin ich erstmal gekommen aber ich weis nicht wie ich das weitermachen muss, so das mir die eingaben alphabetisch bzw. nach größe der zahl sowohl aufsteigend als auch absteigend ausgegeben werden kann:confused::confused:
wenn mir da jemand helfen könnte wäre super
 
Zuletzt bearbeitet:
Ich würde ganz einfach ne Schleife und ne ArrayList nehmen, und je nach dem richtig einreihen. (add(int, Object)).
Nach Strings ordnet man per compareTo bzw. compareToIgnoreCase.
Und du musst bei der ISBN-Nr. noch die Minus entfernen lassen, bevor du es zu Integer parst. (z. B. "978-3-907080-55-9").

Ach ja, die Java-Tags sind nicht zur Zierde da, und die Variablennamen in der main würde ich überarbeiten. (Event. Array.)
Außerdem würde ich bei m - p nach den dritten Buch fragen, sonst könnte das recht verwirrend sein.
 
Ja das mit dem dritten buch hab ich schon reingeschrieben
aber könntest du mir nen beispiel geben für die schleife, verstehe das nicht so ganz?
 
Habs nicht ausgiebig getestet, aber denke so in etwa sollte es hinhauen:

Java:
package core;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

public class Main
{
	private static final byte BOOKS_TO_SORT = 3;
	
	private static final byte SORT_BY_TITLE = 1;
	private static final byte SORT_BY_ARTIST = 2;
	private static final byte SORT_BY_ISBN = 3;
	private static final byte SORT_BY_PRICE = 4;
	
	private static List<Book> sortedList;

	static
	{
		sortedList = new ArrayList<Book>();
	}
	public static void main(String[] args)
	{
		Book[] books = new Book[BOOKS_TO_SORT];
		for(byte loopCounter = 1; loopCounter <= BOOKS_TO_SORT; loopCounter++)
		{
			String title = JOptionPane.showInputDialog("Bitte geben Sie den Titel des "+loopCounter+". Buches ein.");
			String artist = JOptionPane.showInputDialog("Bitte geben Sie den Author des "+loopCounter+". Buches " +
					"ein.");
			String isbn = JOptionPane.showInputDialog("Bitte geben Sie die ISBN Nummer des "+loopCounter+". Buches" +
					" ein.");
			String price = JOptionPane.showInputDialog("Bitte geben Sie den Preis des "+loopCounter+". Buches ein.");
			
			long filteredLongISBN = filterAndParseStringToLong(isbn, '-');
			double floatingPointPrice = Double.parseDouble(price);
			
			books[loopCounter - 1] = new Book(title, artist, filteredLongISBN, floatingPointPrice);
		}
		String sortTyp = JOptionPane.showInputDialog("Nach welcher Kathegorie sollen die Bücher sortiert werden?" +
				System.getProperty("line.separator") +
				"(Titel = 1, Autor = 2, ISBN = 3, Preis = 4)");
		byte byteSortTyp = Byte.parseByte(sortTyp);
				
		for(Book book:books)
			setBookInRow(book, byteSortTyp);

		for(Book book:sortedList)
		{
			String s = book.getTitle() + " - " + book.getArtist() + " - " + book.getISBN() + " - " +
			book.getPrice();
			System.out.println(s);
		}
	}
	private static void setBookInRow(Book book, byte sortTyp)
	{
		if(sortedList.size() == 0)
			sortedList.add(book);
		else
		{
			int positionToAdd = 0;
			boolean breakLoop = false;
			
			if(sortedList.size() == 0)
				sortedList.add(book);
			{
				for(byte loopCounter = 0, size = (byte) sortedList.size(); (loopCounter < size) && (!breakLoop);
				loopCounter++)
				{
					Book loopBook = sortedList.get(loopCounter);
					
					if(sortTyp == SORT_BY_ARTIST ^ sortTyp == SORT_BY_TITLE)
					{
						String lexicographicalCompareString = null;
						if(sortTyp == SORT_BY_TITLE)
						{
							lexicographicalCompareString = book.getTitle();
							if(lexicographicalCompareString.compareTo(loopBook.getTitle()) <= 0)
							{
								positionToAdd = loopCounter;
								breakLoop = true;
							}
						}
						else if(sortTyp == SORT_BY_ARTIST)
						{
							lexicographicalCompareString = book.getArtist();
							if(lexicographicalCompareString.compareTo(loopBook.getArtist()) <= 0)
							{
								positionToAdd = loopCounter;
								breakLoop = true;
							}
						}
					}
					else if(sortTyp == SORT_BY_ISBN)
					{
						long isbn = book.getISBN();
						if(isbn < loopBook.getISBN())
						{
							positionToAdd = loopCounter;
							breakLoop = true;
						}
					}
					else if(sortTyp == SORT_BY_PRICE)
					{
						double price = book.getPrice();
						if(price < loopBook.getPrice())
						{
							positionToAdd = loopCounter;
							breakLoop = true;
						}
					}
				}
			}
			sortedList.add(positionToAdd, book);			
		}
	}
	private static long filterAndParseStringToLong(String stringToFilter, char charToRemove)
	{
		String result = null;
		for(byte b = 0, strSize = (byte) stringToFilter.length(); b < strSize; b++)
		{
			char c = stringToFilter.charAt(b);
			if(c != charToRemove)
			{
				String s = String.valueOf(c);
				if(result != null)
					result+= s;
				else
					result = s;
			}
		}
		return(Long.parseLong(result));
	}
	private static class Book
	{
		private String title;
		private String artist;
		private long isbn;
		private double price;
		
		public Book(String title, String artist, long filteredLongISBN, double floatingPointPrice)
		{
			super();
			this.title = title;
			this.artist = artist;
			this.isbn = filteredLongISBN;
			this.price = floatingPointPrice;
		}
		private String getTitle()
		{
			return(title);
		}
		private String getArtist()
		{
			return(artist);
		}
		private long getISBN()
		{
			return(isbn);
		}
		private double getPrice()
		{
			return(price);
		}
	}
}
 
Ja das funktioniert super, allerdings fehlt mir noch die Eingabe ob es absteigend oder aufsteigend sortiert werden soll. Aber vielen dank
 
nP, das ist eh auch einfach. Eine zusätzliche JOptionPane, und je nach Ergebniss eventuell die Prüfung umdrehen.
Falls du irgend eine Zeile nicht kapierst, frag ruhig.
 
Das schreibt eine neue Instance in die Variable. Die Variable ist nur ein "Platzhalter" für eine Instance im RAM, aber natürlich muss man auch eine Instance mit new erstellen und in die Variable die Instance "schreiben", also der Variable sagen auf welche Instance sie verweißen soll.

Falls du aber den static-Constructor drum herum meinst, der Code darin wird beim ersten Zugriff auf die Klasse ausgeführt (egal ob per Instance wie ne neue Erzeugung, oder per statische Methode), kann aber natürlich nur auf statische Methoden und Variablen zugreifen, da zu den Zeitpunkt noch keine Instance existieren kann.
 

Neue Beiträge

Zurück