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.
ich gebe die Textdatei noch mit bei (als Quelltext der Übersichthalber)
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
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: