3Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
1248
1248
EMPFEHLEN
-
Erstmal ein herzliches Hallo.
Nun aber zum Kern meiner Frage.
Ich habe folgende Aufgabe in der Schule erhalten.
Grundlage hierfür ist eine Textdatei, in der Artikeldaten enthalten sind. Jede Textzeile hat folgenden Aufbau:
Art.Nr.: 8 Zeichen
Art.Bez.:30 Zeichen
ME: 2 Zeichen
MaxBest.:4Zeichen
MinBest.:4Zeichen
Herst.:41 Zeichen
Preis:7Zeichen
MaxPreis:7Zeichen
MinPreis:7 Zeichen
Lieferzeit:2Zeichen
Zwischen den Angaben befindet sich jeweils ein trennendes Leerzeichen. Löse folgende Aufgabe durch ein Java-Projekt:
Es ist eine Artikelliste nach Bestandswerten (=Bestand * Preis) fallend sortiert auszugeben, die in der ME (Mengeneinheit) "QM" geliefert werden. Das Unterprogramm führe bei jedem Aufruf den Vergleich benachbarter Werte aus. Die Artikelbezeichnungen und die Mengeneinheiten(ME) sind mit aus zu geben, ebenso die prozentualen Abweichungen von den Max.- und Min.-Werten (bei Verwendund der Max.- bzw. Min.-Preisen).
Ein gesondertes Unterprogramm soll die Daten aus der Textdatei lesen und bereitstellen.
Seid etlichen Wochen knaupel ich nun an dem Programm rum, es will aber einfach nicht laufen.
So sieht bisher mein Quellcode aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
package main; import java.io.*; import java.text.*; import java.util.*; public class main { ArrayList<String>ArtikelListe = new ArrayList<String>(); static String Einzelartikel; int z =0; Einzelartikel = Einlesen(z); Artikel_Class Instanz = new Artikel_Class(Einzelartikel); if (Einzelartikel == "Fehler") System.out.println("Lesefehler"); while (Einzelartikel != null) return null; { if(Instanz.Mengeneinheit == "QM"); { ArtikelListe.add(Einzelartikel); z = z+1; Einzelartikel = Einlesen(z); } z = z+1; Einzelartikel = Einlesen(z); } if (Einzelartikel == "Fehler") System.exit(0); System.out.println(ArtikelListe); ArtikelListe = Bubblesort(ArtikelListe); System.out.println("Artikelbezeichnung ME Bestand Preis Best.Wert ProzAbweichung"); System.out.println(); System.out.println(ArtikelListe); } public static String Einlesen (int i) { int pos = 126 * i; try { File FileDatei = new File("ARTIKEL.txt"); FileReader FileReader = new FileReader(FileDatei); BufferedReader Reader = new BufferedReader(FileReader); Reader.skip(pos); Einzelartikel = Reader.readLine(); System.out.checkError(); Reader.close(); return Einzelartikel; } catch (Exception Fehler) { System.out.println("Es trat folgender Fehler auf:" + Fehler); return "Fehler"; } } public static ArrayList<String> BubbleSort(ArrayList<String> ArtikelListe) { int Zeilenanzahl = ArtikelListe.size() -1; String a, b; Double BW_a, BW_b; for (int i=0; i<Zeilenanzahl; i++) { for (int j=0; j<Zeilenanzahl; j++) { a = ArtikelListe.get(j); b = ArtikelListe.get(j+1); { } } } return ArtikelListe; } }
___________________________________
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
package main; public class Artikel_Class { String Artikelbezeichnung, Hersteller, Mengeneinheit; int Artikelnummer, Bestand, Minimalbestand, Maximalbestand, Lieferzeit; public String Einzelartikel; public Artikel_Class(String Artikelzeile, double Preis, double Maximalpreis, double Minimalpreis, double Bestandswert, double MinBestandwert, double MaxBestandswert, Object ProzAbweichung, int MinBestandswert) { Artikelnummer=Integer.parseInt(Artikelzeile.substring(0,7)); Artikelbezeichnung=Artikelzeile.substring(8,38); Mengeneinheit=Artikelzeile.substring(39,41); Bestand=Integer.parseInt(Artikelzeile.substring(42,46)); Maximalbestand=Integer.parseInt(Artikelzeile.substring(47,51)); Minimalbestand=Integer.parseInt(Artikelzeile.substring(52,56)); Hersteller=Artikelzeile.substring(57,98); Preis = Double.parseDouble(Artikelzeile.substring(99,106)); Maximalpreis = Double.parseDouble(Artikelzeile.substring(107,114)); Minimalpreis = Double.parseDouble(Artikelzeile.substring(115,122)); Lieferzeit=Integer.parseInt(Artikelzeile.substring(123,124)); Bestandswert = Preis*Bestand; MinBestandwert = Minimalbestand*Minimalpreis; MaxBestandswert = Maximalbestand*Maximalpreis; ProzAbweichung = (MinBestandswert*100)/MaxBestandswert; } }
---------------------------------------------------------
Bitte helft mir, ich weiß mir keinen Rat mehr.
Vielen Dank für euren schnellen Rat und Hinweis.Geändert von Cranus (14.04.10 um 09:19 Uhr)
-
14.04.10 07:41 #2
Moin und Willkommen bei Tutorials.de !
zuerst ein Hinweis: nutze bitte die Code-Tags, damit Dein Code lesbar wird !
Du kannst dies entweder über den '#'-Button im Editor tun oder indem Du den Code händisch mit [_CODE_][_/CODE_] oder in diesem Fall
[_JAVA_][_/JAVA_] (jeweils ohne die Unterstriche klammerst
Du solltest aber bitte auch schon beschreiben, was genau nicht funktioniert (resp. ggf. auch, was das Programm denn geplant tun soll) ... andernfalls wird schwierig Dir zu helfen!Seid etlichen Wochen knaupel ich nun an dem Programm rum, es will aber einfach nicht laufen.
Nix für ungut!
Gruß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
Ich habe den Fehler nicht gefunden. Und was das Programm können soll, steht vor dem Code.
Im Grunde genommen liest das Programm die Datensätze aus der Textdatei und prüft ob der "QM" als Mengeneinheit vorhanden ist. Hiernach sortiert es fallend diese Datensätze und soll sie hiernach ausgeben.Geändert von Cranus (14.04.10 um 10:03 Uhr)
-
14.04.10 09:57 #4Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
ok mein Fehler. Dann hier nochmal auf eine hoffentlich bessere Art und Weise.
Also die Hauptaufgabe bei dem ganzen Projekt:
Grundlage hierfür ist eine Textdatei, in der Artikeldaten enthalten sind. Jede Textzeile hat folgenden Aufbau:
Art.Nr.: 8 Zeichen
Art.Bez.:30 Zeichen
ME: 2 Zeichen
MaxBest.:4Zeichen
MinBest.:4Zeichen
Herst.:41 Zeichen
Preis:7Zeichen
MaxPreis:7Zeichen
MinPreis:7 Zeichen
Lieferzeit:2Zeichen
Zwischen den Angaben befindet sich jeweils ein trennendes Leerzeichen.
besagte Textdatei:
Code :1 2 3 4 5 6 7 8
51600226 Futtertuer TV-F14,5 9*20 R ST 0684 0860 0150 Vereinigte Bauelementewerke Stralsund 1529.80 1595.80 1490.50 4 51700227 Blendrahmentuer TG2-B 9*20 L ST 0012 0480 0080 Forstwirtschaftsbetrieb Waren 1859.20 1899.00 1595.00 3 51700228 Blendrahmentuer TG2-B 9*20 R ST 0310 0480 0080 Forstwirtschaftsbetrieb Waren 1838.00 1899.00 1595.00 3 52100230 Likolit-Belag Extra QM 0100 2000 0500 Linoleumwerke Kohlmuehle 0038.15 0047.95 0038.15 5 52100231 Radeberger Treppenbelag QM 0210 0800 0200 Bauproduktion Radeberg 0029.55 0029.55 0028.95 1 52100232 Stahl-Pur-Bit-Dachelement QM 1150 3000 0800 Holz- und Leichtmetallbauelemente Leipzig 0109.95 0119.00 0099.30 1 61100240 Brausekabine ST 0005 0080 0010 TGA Magdeburg 0962.50 0983.45 0910.00 2 61100241 Praezisionsverdunkl.-Anl.15*20 ST 0007 0160 0040 Licht- und Sonnenschutzanl. Friedrichroda 0316.60 0333.20 0316.60 5
Löse folgende Aufgabe durch ein Java-Projekt:
Es ist eine Artikelliste nach Bestandswerten (=Bestand * Preis) fallend sortiert auszugeben, die in der ME (Mengeneinheit) "QM" geliefert werden. Das Unterprogramm führe bei jedem Aufruf den Vergleich benachbarter Werte aus. Die Artikelbezeichnungen und die Mengeneinheiten(ME) sind mit aus zu geben, ebenso die prozentualen Abweichungen von den Max.- und Min.-Werten (bei Verwendund der Max.- bzw. Min.-Preisen).
Ein gesondertes Unterprogramm soll die Daten aus der Textdatei lesen und bereitstellen.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
package main; import java.io.*; import java.text.*; import java.util.*; public class main { ///** //* @param args //*/ public static void main(String[] args) { /** Das Programm liest alle Artikel mit Mengenangabe QM aus, * berechnet den Bestandswert und Prozentuale Abweichungen und * sortiert fallend nach Bestandswerten mit dem Vergleich benachbarter Werte */ ArrayList<String> ArtikelListe = new ArrayList<String>(); //ArrayListe fŸr DatensŠtze String Einzelartikel; int z =0; //DecimalFormat uf = new DecimalFormat( "##,##0.00" ); // Formatierung für die Ausgabe, DiffEuro //DecimalFormat zf = new DecimalFormat( "#0.00"); // DiffProz DecimalFormat df = new DecimalFormat( "####0.00" ); // Formatierung //DecimalFormatSymbols ds = new DecimalFormatSymbols(); Einzelartikel = Einlesen(z); //erster Aufruf UP Einlesen (vor der Schleife) System.out.println(Einzelartikel); if (Einzelartikel == "Fehler") System.out.println("Lesefehler"); //Fehlerausgabe while (Einzelartikel!= null) //Beginn EndgeprŸfte while-Schleife { Artikel_Class Instanz = new Artikel_Class(Einzelartikel); //Erzeugung neue Instanz der Klasse //Artikel_Class und †bergabe des Inhalts //von String Einzelartikel //Einzelartikel = Instanz.Einzelartikel; //†bernahme String Einzelartikel aus der Instanz //System.out.println(Instanz.Artikelnummer); //System.out.println(Instanz.Artikelbezeichnung); //System.out.println(Instanz.Mengeneinheit); //System.out.println(Instanz.Bestand); //System.out.println(Instanz.Maximalbestand); //System.out.println(Instanz.Minimalbestand); //System.out.println(Instanz.Hersteller); //System.out.println(Instanz.Preis); //System.out.println(Instanz.Maximalpreis); //System.out.println(Instanz.Minimalpreis); //System.out.println(Instanz.Lieferzeit); System.out.println(Instanz.Bestandswert); if (Instanz.Mengeneinheit == "QM") { //Einzelartikel = Einzelartikel+Instanz.Bestandswert+Instanz.ProzAbweichung; Einzelartikel = Instanz.Artikelbezeichnung + " " + Instanz.Mengeneinheit + " " + Instanz.Bestand + " " + Instanz.Preis + " " + df.format(Instanz.Bestandswert) + " " + df.format(Instanz.ProzAbweichung); ArtikelListe.add(Einzelartikel); //in die ArtikelListe aufnehmen z = z+1; //Zähler erhöhen Einzelartikel = Einlesen(z); //UP Einlesen aufrufen } else { z = z+1; //Zähler erhšhen Einzelartikel = Einlesen(z); //UP Einlesen aufrufen } System.out.println(Einzelartikel); if (Einzelartikel == "Fehler") System.exit(0); //falls UP Fehler zurückgibt, Abbruch Programm } System.out.println(ArtikelListe); ArtikelListe = BubbleSort(ArtikelListe); //UP Bubblesort sortiert ArtikelListe nach Bestandswerten System.out.println("Artikelbezeichnung ME Bestand Preis Best.Wert Proz.Abweichung"); System.out.println(); System.out.println(ArtikelListe); } public static String Einlesen(int i) //UP Einlesen wird gestartet { int pos = 126 * i; //Deklaration & Initialisierung der Positionierungsvariable String Einzelartikel; try { File Datei = new File("ARTIKEL.txt"); //lesen der einzelnen Datensätze unter FileReader FileReader = new FileReader(Datei); //Verwendung der try-catch Anweisung BufferedReader Reader = new BufferedReader(FileReader); //(Exception-Handling) Reader.skip(pos); //Positionierung auf nŠchstem Datensatz Einzelartikel = Reader.readLine(); //Datensatz wird gelesen System.out.checkError(); Reader.close(); //Lesepuffer wird geschlossen return Einzelartikel; //zurück zum rufendem Programm mit Datensatz //wenn kein Datensatz mehr, dann gibt >null< zurück } catch(Exception Fehler) { System.out.println("Es trat folgender Fehler auf: " + Fehler); //weitere Fehlerbehandlung erfolgt im HP return "Fehler"; } } public static ArrayList<String> BubbleSort(ArrayList<String> ArtikelListe) { int Zeilenanzahl = ArtikelListe.size() -1; //Bestimmt die anzahl der DatensŠtze in der Liste String String_A, String_B; //Deklarieren der nštigen Variablen Double BestWert_A, BestWert_B; //DecimalFormat uf = new DecimalFormat( "##,##0.00" ); // Formatierung für die Ausgabe, DiffEuro //DecimalFormat zf = new DecimalFormat( "#0.00"); // DiffProz for (int i=0; i < Zeilenanzahl; i++) { for (int j=0; j < Zeilenanzahl; j++) { String_A = ArtikelListe.get(j); //zu vergleichende String aus der Liste entnehmen String_B = ArtikelListe.get(j+1); BestWert_A = Double.parseDouble(String_A.substring(44,52)); //Bestandswert aus Strings auslesen BestWert_B = Double.parseDouble(String_B.substring(44,52)); if (BestWert_B < BestWert_A) //Ist Bestandswert B kleiner als A? { ArtikelListe.set(j+1, String_A); //dann vertausche Datensätze ArtikelListe.set(j, String_B); } } } return ArtikelListe; //fallend sortierte ArtikelListe zurück an HP } }
Dazu habe ich die Artikel_Class programmiert, in der die Positionierung und Formatierung der einzelnen Strings festgelegt wird.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
package prüfung_info_42; import java.text.*; public class Artikel_Class //KLasse wird deklariert { //Klassenvariablen werden deklariert (Bestandteile von ARTIKEL.txt) String Artikelbezeichnung, Hersteller, Mengeneinheit; int Artikelnummer, Bestand, Minimalbestand, Maximalbestand, Lieferzeit; double Preis, Maximalpreis, Minimalpreis, Bestandswert, MinBestandswert, MaxBestandswert, ProzAbweichung; public String Einzelartikel; //Einzelartikel als String definiert DecimalFormat df = new DecimalFormat( "####0.00" ); // Formatierung DecimalFormatSymbols ds = new DecimalFormatSymbols(); //Anfang Konstruktor public Artikel_Class(String Artikelzeile) { Artikelnummer=Integer.parseInt(Artikelzeile.substring(0,8)); Artikelbezeichnung=Artikelzeile.substring(9,39); Mengeneinheit=Artikelzeile.substring(40,42); Bestand=Integer.parseInt(Artikelzeile.substring(43,47)); Maximalbestand = Integer.parseInt(Artikelzeile.substring(48,52)); Minimalbestand = Integer.parseInt(Artikelzeile.substring(53,57)); Hersteller= Artikelzeile.substring(58,98); Preis= Double.parseDouble(Artikelzeile.substring(99,107)); Maximalpreis= Double.parseDouble(Artikelzeile.substring(108,114)); Minimalpreis= Double.parseDouble(Artikelzeile.substring(115,123)); Lieferzeit = Integer.parseInt(Artikelzeile.substring(124, 125)); ds.setDecimalSeparator('.'); // Setzt Dezimaltrennzeichen auf '.' df.setDecimalFormatSymbols(ds); // notwenig für Konvertierung String -> Double //Umsatz = Math.round(Preis * Stck * 100) / 100.; //Einzelartikel = df.format(Umsatz) + " " + Anr + " " + Abez; Bestandswert = Math.round(Preis * Bestand); MinBestandswert = Minimalbestand * Minimalpreis; MaxBestandswert = Maximalbestand * Maximalpreis; ProzAbweichung = Math.round(MinBestandswert * 100) / MaxBestandswert; Einzelartikel = Artikelbezeichnung + " " + Mengeneinheit + " " + Bestand + " " + Preis + " " + df.format(Bestandswert) + " " + ProzAbweichung; } }
Zum einen liest er zwar die TXT Datei aus, gibt aber entweder alle Datensätze aus, keinen, oder er nimmt immer 1 Zeichen beim nächsten String weg, sprich Datensatz 2 hat 1 Zeichen weniger, usw.
Was es nun tun soll; es soll die TXT Datei nach allen Datensätzen durchsuchen, also er überprüft alle Datensätze, und soll im Endeffekt nur die Datensätze ausgeben, deren Mengeneinheit "QM" ist.
-
- Strings vergleicht man nicht mit dem Operator == , sondern mit der equals-Methode.
- Wenn du schon eine Artikel-Klasse hast, dann solltest du die ArrayList auch vom Typ Artikel_Class machen.
- Für den Vergleich von zwei Artikel_Class-Objekten ist es besser, wenn du das Interface Comparable implementierst. Mit Hilfer der compareTo-Methode kannst du dann in deiner Bubblesort-Methode direkt zwei Objekte miteinander vergleichen, welche die Bestandswerte als double-Zahlen vergleichen.
- Für die Ausgabe als String solltest du in deiner Klasse die toString()-Methode überschreiben und bei der Ausgabe aufrufen.
- Für das Vertauschen brauchst du eine Zwischenvariable, sonst überschreibst du einen Wert.
- Du brauchst die Artikelliste nicht als Funktionswert zurückzugeben, weil Bubblesort in-place arbeitet, d.h. die übergebene ArrayList verändert.
- Die Schleifenzähler in deiner Bubblesort-Funktion werden falsch durchlaufen. Richtig ist:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public static void BubbleSort(ArrayList<Artikel_Class> ArtikelListe) { Artikel_Class tmp; int Zeilenanzahl = ArtikelListe.size() -1; for (int i=Zeilenanzahl-1; i > 0; i--) { for (int j=0; j < i; j++) { if ( ArtikelListe.get(j).compareTo(ArtikelListe.get(j+1)) != -1 ) { continue; } tmp = ArtikelListe.get(j); ArtikelListe.set(j , ArtikelListe.get(j+1)); ArtikelListe.set(j+1, tmp); } } }
Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
Ähnliche Themen
-
[Excel] Tabelle nach mehreren Kriterien sortieren
Von mc_gulasch im Forum Office-AnwendungenAntworten: 2Letzter Beitrag: 29.06.06, 11:24 -
Themen in den Foren meines phpBB Boards auch nach anderen Kriterien sortieren
Von zweitausendvier im Forum PHPAntworten: 3Letzter Beitrag: 05.08.04, 10:45 -
Aus Textdatei nur einen Teil auslesen (nach Vorgabe)
Von Tharos im Forum PHPAntworten: 3Letzter Beitrag: 24.05.04, 18:43 -
Aus Textdatei auslesen und sortieren
Von scadoXus im Forum PHPAntworten: 6Letzter Beitrag: 07.05.04, 17:06 -
Tabelleninhalt nach verschiedenen Kriterien sortieren
Von acquire im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 30.04.04, 10:24





Zitieren



Login




