sortierte Ausgabe eines .txt Dokuments

Hey, habe die Aufgabenstellung bekommen für ein bereits erstelltes Programm, welche die Anbieter und Preise einer Tabelle sortiert ausgeben soll ein paar Methoden und ein Konstruktor zu erstellen zu erstellen.
Habe dies jetzt gemacht und es gibt ein kleineres Problem: die Formatierung des Preises wird nicht richtig angezeigt
und ein größeres: Nur die letzte Zeile der .txt Datei wird ausgegeben, das Ergebnis sieht dann ungefähr so aus: Jorge Wenus: 895(Pyroland) -> nur wiederholte male untereinander.

Der von mir geschriebene Quelltext bezieht sich nur auf die Klasse Artikel ab Zeile 15, der Rest ist Rahmenprogramm und darf nicht geändert werden.

Java:
// --------------------------------------------------------
// Objektorientierte Programmierung - Hausaufgabe 8
// Name: 
// --------------------------------------------------------

import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;

// --------------------------------------------------------
// Hier Ihre Klasse Artikel:
// --------------------------------------------------------
public class Artikel {
	private static String hersteller;
	private static String artikelname;
	private static int minPreis;
	private static int maxPreis;
	private static int preis;
	private static String geschaeft;

		public Artikel(String hersteller, String artikelname,int preis,String anbieter) {
			this.hersteller=hersteller;
			this.artikelname=artikelname;
			this.preis=preis;
			geschaeft=anbieter;
			maxPreis=preis;
			minPreis=preis;
		}

	public static void alternativAngebot(int preis,String anbieter) {
		if (preis<minPreis) {
			minPreis=preis;
			geschaeft=anbieter;
		}
	}

	public static String hersteller() {return hersteller;}
	public static String artikelname() {return artikelname;}
	public static int minPreis() {return minPreis;}
	public static int maxPreis() {return maxPreis;}

	public String toString() {
		String Preismax=String.format("%d.%02d",maxPreis/100,maxPreis%100);
		String Preismin=String.format("%d.%02d",minPreis/100,minPreis%100);
		if (maxPreis==minPreis) {
			String tabelle=Artikel.hersteller+" "+Artikel.artikelname+": "+minPreis+ "("+geschaeft+")";
			return tabelle;
		}
		else {
			String tabelle=Artikel.hersteller+" "+Artikel.artikelname+": "+minPreis+"-"+maxPreis+" ("+geschaeft+")";
			return tabelle;
		}
	}
}
// --------------------------------------------------------
// Rahmenprogramm zum Einlesen der Daten:
// --------------------------------------------------------

class ArtikelTest {

	// Name der Daten-Datei:
	private static final String DATA_FILE = "Artikel.txt";

	// Maximale Anzahl verschiedener Artikel:
	private static final int MAX_ART = 100;

	// Array zum Speichern bisher erzeugter Artikel-Objekte:
	private static Artikel[] artArr;

	// Anzahl Artikel (d.h. erste freie Position im Array):
	private static int artNum;

	// Hilfsfunktion: Bestimmt Position des naechsten Trennzeichens |
	private static int nextDelimiter(int lineNo, String line, int from) {
		int to = line.indexOf('|', from);
		if(to < 0) {
			System.err.println("Fehler in Zeile " + lineNo +
					"(" + line + "): " +
					"| fehlt.");
			System.exit(3);
		}
		return to;
	}

	// Hilfsfunktion: Preis von String in Cent-Wert umrechnen:
	private static int parseMoney(int lineNo, String line, String money) {
		int point = money.indexOf('.');
		if(point < 0) {
			System.err.println("Fehler in Zeile " + lineNo +
					"(" + line + "): " +
					"'.' fehlt im Preis.");
			System.exit(3);
		}
		if(point != money.length() - 3) {
			System.err.println("Fehler in Zeile " + lineNo +
					"(" + line + "): " +
					"Preis muss genau zwei " +
					"Nachkommastellen haben.");
			System.exit(3);
		}
		String centStr = money.substring(point + 1);
		String euroStr = money.substring(0, point);
		int cent = 0;
		int euro = 0;
		try {
			cent = Integer.parseInt(centStr);
			euro = Integer.parseInt(euroStr);
		}
		catch(NumberFormatException e) {
			System.err.println("Fehler in Zeile " + lineNo +
					"(" + line + "): " +
					"Preis nicht numerisch.");
			System.exit(3);
		}
		if(cent < 0) {
			System.err.println("Fehler in Zeile " + lineNo +
					"(" + line + "): " +
					"Syntaxfehler im Preis.");
			System.exit(3);
		}
		if(euro < 0) {
			System.err.println("Fehler in Zeile " + lineNo +
					"(" + line + "): " +
					"Negativer Preis geht nicht.");
			System.exit(3);
		}

		// Ok:
		return euro * 100 + cent;
	}

	// Eingabezeile aus Daten-Datei verarbeiten:
	private static void processLine(int lineNo, String line) {
		// Erstes Feld im Datensatz: Hersteller/Importeur
		int from = 0;
		int to = nextDelimiter(lineNo, line, from);
		String manuf = line.substring(from, to);

		// Zweites Feld im Datensatz: ArtikelName
		from = to + 1;
		to = nextDelimiter(lineNo, line, from);
		String articlename = line.substring(from, to);

		// Drittes Feld im Datensatz: Preis
		from = to + 1;
		to = nextDelimiter(lineNo, line, from);
		String price = line.substring(from, to);

		// Viertes Feld im Datensatz: Anbieter
		from = to + 1;
		String shop = line.substring(from);

		// Preis pruefen und in Cent umrechnen:
		int cent = parseMoney(lineNo, line, price);

		// Testausgabe:
		//System.out.println(manuf + ":" + articlename + ":" +
		//			cent + ":" + shop);

		// Pruefen, ob Artikel neu:
		boolean found = false;
		for(int i = 0; i < artNum; i++) {
			Artikel art = artArr[i];
			if(art.artikelname().equals(articlename) &&
				art.hersteller().equals(manuf)) {
				art.alternativAngebot(cent, shop);
				found = true;
				break;
			}
		}

		// Ggf. Artikel-Objekt anlegen:
		if(!found) {
			if(artNum == MAX_ART) {
				System.err.println("Zu viele Artikel!");
				System.exit(4);
			}
			artArr[artNum++] =
				new Artikel(manuf, articlename, cent, shop);
		}
	}

	public static void main(String[] args) {

		// Array fuer Artikelliste anlegen:
		artArr = new Artikel[MAX_ART];
		artNum = 0;

		// Pruefungen der Eingabedatei
		// (hauptsaechlich, um File-Funktionen zu zeigen):
		File dataFile = new File(DATA_FILE);
		if(!dataFile.exists()) {
			System.err.println("Datei '" + DATA_FILE +
				"' existiert nicht.");
			System.exit(2);
		}
		if(!dataFile.isFile()) {
			System.err.println("'" + DATA_FILE +
				"' ist keine normale Datei " +
				"(z.B. Verzeichnis).");
			System.exit(2);
		}
		if(!dataFile.canRead()) {
			System.err.println("'" + DATA_FILE +
				"' ist nicht lesbar " +
				"(bitte Zugriffsrechte pruefen).");
			System.exit(2);
		}

		// Datei oeffnen:
		FileReader reader = null;
		try {
			reader = new FileReader(dataFile);
		}
		catch(FileNotFoundException e) {
			System.err.println("Fehler beim Eroeffnen " +
				"der Datei '" + DATA_FILE + "': " + e);
			System.exit(2);
		}
		BufferedReader input = new BufferedReader(reader);

		// Eingabezeilen lesen:
		int lineNo = 1;
		while(true) {
			String line = null;
			try {
				line = input.readLine();
			}
			catch(IOException e) {
				System.err.println("Fehler beim Lesen " +
					"aus der Datei '" + DATA_FILE +
					"': " + e);
				System.exit(2);
			}
			// Schluss falls Dateiende erreicht:
			if(line == null)
				break;
			processLine(lineNo, line);
			lineNo++;
		}

		// BufferedReader schliessen, schliesst auch FileReader:
		try {
			input.close();
		}
		catch(IOException e) {
			System.err.println("Fehler beim Schliessen " +
				"der Datei '" + DATA_FILE + "': " + e);
			System.exit(2);
		}

		// Artikelliste drucken:
		System.out.println("*** " + artNum + " Artikel ***");
		System.out.println();
		for(int i = 0; i < artNum; i++)
			System.out.println(artArr[i]);
	}
}


ich gebe die Textdatei noch mit bei (als Quelltext der Übersichthalber)

Java:
Weco|Breezer|6.95|Roeder
Weco|Mr. Universe|12.95|Roeder
Weco|Silberpalm Finale|11.50|Roeder
Weco|Tanz der Vampire|9.95|Roeder
Jorge|Orient|2.49|Roeder
Jorge|Wenus|7.95|Roeder
Jorge|Malachit|24.95|Roeder
Jorge|New Generation 4|17.95|Roeder
Jorge|New Generation 5|17.95|Roeder
Jorge|Solar|23.95|Roeder
Blackboxx|Hypnotica|6.95|Roeder
Blackboxx|Blender|36.95|Roeder
Blackboxx|Erzengel|34.95|Roeder
Blackboxx|Feuer und Eis|21.99|Roeder
Weco|Tanz der Vampire|11.99|Feuerwerksvitrine
Weco|Saphir|29.99|Feuerwerksvitrine
Jorge|Show of Fireworks (JW56)|34.99|Feuerwerksvitrine
Jorge|Malachit|24.99|Feuerwerksvitrine
Jorge|Orient|2.75|Feuerwerksvitrine
Jorge|New Generation 4|21.49|Feuerwerksvitrine
Jorge|Wenus|8.99|Feuerwerksvitrine
Blackboxx|Erzengel|38.99|Feuerwerksvitrine
Blackboxx|Hypnotica|7.99|Feuerwerksvitrine
Nico|Monster King|18.99|Feuerwerksvitrine
Lesli|Dimitri|29.99|Feuerwerksvitrine
Jorge|Wenus|9.99|Firestorm Fireworks
Blackboxx|Feuer und Eis|24.99|Firestorm Fireworks
Blackboxx|Blender|39.99|Firestorm Fireworks
Blackboxx|Xtrem|39.99|Firestorm Fireworks
Jorge|Malachit|24.95|Feuerwerktraum
Jorge|New Generation 4|18.99|Feuerwerktraum
Jorge|Exclusive Collection 1|28.99|Feuerwerktraum
Jorge|Show of Fireworks (JW56)|32.99|Feuerwerktraum
Weco|Breezer|6.99|Feuerwerktraum
Weco|Silberpalm Finale|10.99|Feuerwerktraum
Blackboxx|Hypnotica|8.00|Pyroland
Nico|Monster King|16.90|Pyroland
Weco|Mr. Universe|15.12|Pyroland
Jorge|Wenus|8.95|Pyroland

Hoffe mir kann jemand helfen?

Edit: okay die Formatierung hab ich geschafft, nur die falsche variable genutzt bei der Ausgabe. Bleibt nur das andere Problem
 
Zuletzt bearbeitet:

X5-599

Top Contributor
Zwei Sachen, die mir aufgefallen sind beim überfliegen:

1)

In deiner Artikel Klasse sollten die Attribute (hersteller, artikelname etc) nicht static sein. Und auch deren Getter Methoden (herstellername(), artikelname() etc.) sollten nicht static sein. Ebenso alternativAngebot().
Kleine Anmerkung: Bessere Namen für die Getter Methoden wären z.B. getHerstellerName()


2)

In der Artikel Klasse toString() Methode machst du einen String Vergleich. Das macht man nicht mit "==" sonden mit "equals". z.B. preis1.equals(preis2)


Versuche mal das so umzusetzen. Vielleicht löst das ja schon dein Problem. Ich habe mir das Einlesen/Verarbeitung nicht genauer angesehen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Sortierte Ausgabe in der Shell Java Basics - Anfänger-Themen 4
L Zwei sortierte Subarrays mit gleicher Länge zusammenfügen Java Basics - Anfänger-Themen 2
B sortierte Liste Java Basics - Anfänger-Themen 4
E sortierte Arrayteile zusammenfügen Java Basics - Anfänger-Themen 0
A Sortierte Listen Java Basics - Anfänger-Themen 4
J Sortierte generische Liste Java Basics - Anfänger-Themen 1
K 2 sortierte Arrays zu einem Arrays zusammenführen Java Basics - Anfänger-Themen 13
B Sortierte Liste implementieren Java Basics - Anfänger-Themen 3
H 2 sortierte arrays in ein array Java Basics - Anfänger-Themen 2
M Sortierte Tabelle in Datei schreiben Java Basics - Anfänger-Themen 5
P Sortierte Liste Java Basics - Anfänger-Themen 29
Povlsen84 Datentypen Große, sortierte, schnelle Datenstruktur Java Basics - Anfänger-Themen 9
L Problem mit Iterator bzw. Sortierte Liste Java Basics - Anfänger-Themen 14
S Sortierte LinkedList nach Variablen durchsuchen und nicht nach INDEX Java Basics - Anfänger-Themen 6
G Zwei sortierte Arrays zusammenführen Java Basics - Anfänger-Themen 13
G Sortierte Daten Java Basics - Anfänger-Themen 7
M Sortierte Liste / Map Java Basics - Anfänger-Themen 8
M Sortierte Liste nach Wert durchsuchen Java Basics - Anfänger-Themen 8
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
M Ausgabe beim Overloading Java Basics - Anfänger-Themen 3
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
B Binärzahlen auflisten, falsche Ausgabe? Java Basics - Anfänger-Themen 1
M Java Ausgabe der höchsten Zahl Java Basics - Anfänger-Themen 14
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
B Automatisierte Ausgabe (Schleife, If-Abfrage?) Java Basics - Anfänger-Themen 24
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
B Deadlock verstehen der Ausgabe! Java Basics - Anfänger-Themen 12
Lion.King Ausgabe mit Eigenschaften Java Basics - Anfänger-Themen 4
D Java Pattern mit X Ausgabe Stern Java Basics - Anfänger-Themen 4
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
Xaver code Tastatur ausgabe Java Basics - Anfänger-Themen 4
R Anfänger: Ausgabe kommt minus raus? Java Basics - Anfänger-Themen 6
K Leerzeile in Konsolen-Ausgabe Java Basics - Anfänger-Themen 4
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
Q return Ausgabe Java Basics - Anfänger-Themen 4
C Java Arrays - Ausgabe in Methode Java Basics - Anfänger-Themen 12
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
S Ausgabe des Variablenwerts Java Basics - Anfänger-Themen 10
I Ausgabe nicht nur senkrecht sondern auch waagerecht. Java Basics - Anfänger-Themen 2
paulen1 Methoden Unerwünschte Ausgabe bei System.out.print in For-Schleife Java Basics - Anfänger-Themen 8
C Ausgabe boolean return ((n==9)||(n==0)); Java Basics - Anfänger-Themen 13
F Double Ausgabe nicht wissenschaftlich Java Basics - Anfänger-Themen 16
danieldemetry Java - Graph Komponenten - Ausgabe Java Basics - Anfänger-Themen 0
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
D BigDecimal Ausgabe sehr lang. Java Basics - Anfänger-Themen 2
J String Ausgabe Java Basics - Anfänger-Themen 2
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
KogoroMori21 Array-Ausgabe Java Basics - Anfänger-Themen 6
JaVaN0oB Wörterraten - Falsche Ausgabe, String/Chars vergleichen Java Basics - Anfänger-Themen 2
E Ausgabe überschreiben Java Basics - Anfänger-Themen 15
D Ausgabe von Array Java Basics - Anfänger-Themen 2
U Ausgabe Java Basics - Anfänger-Themen 4
J Buchstabenhäufigkeit mit Array und Ausgabe des häufigsten Buchstaben Java Basics - Anfänger-Themen 25
V Multiplikationstafel - Ausgabe Java Basics - Anfänger-Themen 4
L Warum ist die Ausgabe anders als das was im Bezeichner steht? Java Basics - Anfänger-Themen 4
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
H Falsche Ausgabe Java Basics - Anfänger-Themen 2
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
R Call-by-Value, Call-by-Reference, Call-by-Name Ausgabe Java Basics - Anfänger-Themen 1
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
D Warum erfolgt folgende Ausgabe und warum? Java Basics - Anfänger-Themen 4
C Ausgabe in der Konsole Java Basics - Anfänger-Themen 11
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
A Ausgabe mit boolean Java Basics - Anfänger-Themen 3
K Probleme bei der Ausgabe - komme nicht weiter :/ Java Basics - Anfänger-Themen 15
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
Y Methode + Parameters + Ein und Ausgabe Java Basics - Anfänger-Themen 1
K Methodenaufruf /-ausgabe Java Basics - Anfänger-Themen 5
A Wiederholte Ausgabe vermeiden Java Basics - Anfänger-Themen 16
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
M Wie analysiert JSON eine toString-Ausgabe ? Java Basics - Anfänger-Themen 1
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
T Ausgabe einer for Schleife Java Basics - Anfänger-Themen 2
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
T Text-Ausgabe für Textadventure - Organisation Java Basics - Anfänger-Themen 5
G Unterklassen (Klasse für Ausgabe) Java Basics - Anfänger-Themen 4
N Eingabe des Users direkt hinter die Ausgabe Java Basics - Anfänger-Themen 3
J Methode zur Ausgabe eines Dreiecks aus Sternen schreiben? Java Basics - Anfänger-Themen 2
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
B Keine Ausgabe .. Woran liegt das? Ich komme nicht weiter Java Basics - Anfänger-Themen 14
K Rechtsbündige Ausgabe von Zahlen Java Basics - Anfänger-Themen 6
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
J Ausgabe Gesamtpreis Java Basics - Anfänger-Themen 39
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
J StrinBuffer in der Ausgabe Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben