zNeL Geschrieben 20. Oktober 2008 Geschrieben 20. Oktober 2008 Guten Morgen! Bin mehr oder weniger Anfänger in Java, hoffe mal ihr könnt mir weiterhelfen. Erstmal zum Thema kurz, es soll eine Anwendung geschrieben werden, welche Daten in einem Vektor speichert, und diese später ausgibt. So das erste Problem: Es sind immer 2 zusammengehörige Daten, die auch zusammen ausgegeben werden sollen (z.B. Artikelnummer und Wert eines Artikels). Wenn ich das also so mache: int anzahl; anzahl=meinVector.size(); System.out.println(anzahl); for ( int i = 0; i < anzahl; i++) { System.out.println("Artikelnummer und Wert: "+meinVector.get(i)); } } wäre das ja blödsinn, da die Ausgabe immer nur einen Wert anzeigen würde, erst Artikelnummer, danach den Wert usw... Allerdings steht da ja dann immer "Artikelnummer und Wert" Habe die Daten mit meinVector.add() hinzugefügt, gibt es da eine Möglichkeit Werte zusammen zu fassen? Zu meiner Frage mit dem Variablen einlesen. Es sollen also Artnr. und Wert eingegeben werden, nach Eingabe will ich dann Fragen ob weitere Artikel eingegeben werden sollen, jedoch kann ich mit dem BufferedReader ja nur Strings einlesen, will aber bei "ja" die Funktion erneut starten. Also so würde es ja logischerweise dann nicht gehen: System.out.println("Weiteren Artikel eingeben? j oder n"); BufferedReader in3 = new BufferedReader( new InputStreamReader(System.in) ); auswahl = in3.readLine(); System.out.println(auswahl); /* if(auswahl==j) geht ja nicht hier, da es kein Boolean ist { komponenteHinzufuegen(); }*/ weiß jemand irgend eine Möglichkeit? Schonmal danke an die, die sich die Mühe gemacht haben das alles zu lesen. Hoffe es war einigermaßen verständlich. Gruß zNeL Zitieren
flashpixx Geschrieben 20. Oktober 2008 Geschrieben 20. Oktober 2008 Ich versteh nicht so recht wo das Problem ist. Vector<meineDaten> blub = new Vector<meineDaten>(); a = new meineDaten(); a.meinAttribut1 = "abcdef"; a.meinAttribut2 = 12345; blub.add(a); for(int i=0; i < blub.size(); i++) sys.pr.out( blub.get(i).meinAttribut1 + blub.get(i).meinAttribut2 das for geht auch als Iterator, wenn ich nicht irre. Aber warum einen Vector, müssen die Daten zwingend synchronisiert sein? Phil Zitieren
zNeL Geschrieben 20. Oktober 2008 Autor Geschrieben 20. Oktober 2008 Danke schonmal, woher hast denn du das meineDaten in den <> genommen? bei mir meckert er rum wenn ich das einfach so dazuschreibe. Vector weil es ne Vorgabe ist, und die Inhalte später noch sortiert werden sollen, größter Wert zuerst mit zugehöriger Artikelnummer zum Beispiel Zitieren
flashpixx Geschrieben 20. Oktober 2008 Geschrieben 20. Oktober 2008 (bearbeitet) Vector (Java 2 Platform SE v1.4.2) Galileo Computing :: Java ist auch eine Insel – 12.3 Listen Vector weil es ne Vorgabe ist, und die Inhalte später noch sortiert werden sollen, größter Wert zuerst mit zugehöriger Artikelnummer zum Beispiel Das ist kein Grund um einen Vector zu nehmen. Nur weil es Vorgabe ist und sortiert werden muss, ist ein Vector nicht zu begründen! siehe dazu unter der Sun Adresse: As of the Java 2 platform v1.2, this class has been retrofitted to implement List, so that it becomes a part of Java's collection framework. Unlike the new collection implementations, Vector is synchronized. vs ArrayList [...] This class is roughly equivalent to Vector, except that it is unsynchronized. [...] Phil Bearbeitet 20. Oktober 2008 von flashpixx Zitieren
zNeL Geschrieben 20. Oktober 2008 Autor Geschrieben 20. Oktober 2008 Da hast du wohl Recht, normal ist das kein Grund. Aber ich hab die Vorgabe bekommen das mit nem Vektor zu lösen, dann kann ich das ja nicht einfach anders machen. Trotzdem aber schonmal vielen Dank, nur komme ich immer noch nicht wirklich weiter. Das 2. Problem habe ich schon selbst gelöst, zwar etwas unschön aber es funktioniert jetzt. Zitieren
nekokaburi Geschrieben 20. Oktober 2008 Geschrieben 20. Oktober 2008 Hallo, Falls es zu jeder Artikelnummer nur einen Wert gibt und die Artikelnummer eindeutig ist, könnte man statt eines Vektors ganz einfach eine Map nehmen, diese speichert alles als Key-Value-Paare, du kannst also beide Werte speichern! Nimmst du eine TreeMap sortiert dir die Liste die Werte sogar von ganz alleine Wegen dem Dateieinlesen... wo ist da das Problem? du hast den String "j" für weitermachen, wieso prüfst du nicht if(inputString.equals("j")? Grüße, Neko Zitieren
zNeL Geschrieben 20. Oktober 2008 Autor Geschrieben 20. Oktober 2008 @ nekokaburi genau so hab ich das nun gemacht, klappt nun auch doch ganz sauber, hatte nen kleinen Fehler in der else if abfrage. Zitieren
zNeL Geschrieben 20. Oktober 2008 Autor Geschrieben 20. Oktober 2008 habe es nun ganz anders gemacht, eher rumgetrickst als wirklich gelöst: int anzahl=meinVector.size(); for ( int i = 0; i < anzahl; i=i+2) { System.out.println("Artikelnummer: "+meinVector.get(i) + " Wert: "+meinVector.get(i+1)); } Nun wird mir immer die Artikelnummer angegeben, und danach der Wert. Natürlich ist es so eher nicht möglich dies alles zu sortieren, wie gesagt eher getrickst als alles andere... zufrieden bin ich damit eigentlich nicht :old Zitieren
Dragon8 Geschrieben 20. Oktober 2008 Geschrieben 20. Oktober 2008 Wenn du es etwas sauberer haben willst, dann mach es so wie es flashpixx vorgeschlagen hat. Du erstellst eine eigene Klasse die die Artikelnummer und den Wert dafür speichert. Dazu noch ne Getter und Setter Methode für beide Attribute und die benutzt du dann um die Daten in deinem Vector zu speichern. Das heißt du legst für alle Datenpaare einfach nen neues Objekt deiner Klasse an und speicherst die Artikelnummer und den Wert dann in diesem Objekt. Das legste dann anstatt der Artikelnummer und dem Wert in dem Vector ab. Zitieren
nekokaburi Geschrieben 20. Oktober 2008 Geschrieben 20. Oktober 2008 Mhm deine Lösung ist natürlich nicht wirklich ideal. Wie du selbst gesagt hast, sortieren ist nicht möglich! Außerdem ist es so für jemand anderen schwer zu verstehen, was das eigentlich soll... und eine for-schleife mit i=i+2 sollte zumindest kommentiert werden, sowas überliest man sonst leicht Allgemein solltest du dir einen besseren Namen als "meinVektor" ausdenken, nenn es doch "artikelnummernVektor" oder besser noch (da nach CodeConventions) du benutzt englische Namen. Achja, solltest du ein eigenes Objekt erstellen wie oben gefordert, vergiss nicht, dass diese Klasse Comparable implementieren muss (compareTo-Methode), damit du deinen Vektor sortieren kannst. Wobei ich immernoch nicht verstehe, warum du dort nicht HashMap, oder zumindest LinkedList/ArrayList hernimmst? Grüße, Neko Zitieren
zNeL Geschrieben 20. Oktober 2008 Autor Geschrieben 20. Oktober 2008 ja hast recht da smit dem i=i+2 war nicht optimal, hab es nun so gemacht: int anzahl=meinVector.size(); for ( int i = 0; i < anzahl; i++) { System.out.println("Artikelnummer: "+ meinVector.get(i).getArtnr()+" Wert: " + meinVector.get(i).getWert()); } die Comparable Sache werd ich nur erstmal googeln Ansonsten schonmal vielen Dank an alle!! Gruß zNeL Zitieren
zNeL Geschrieben 27. Oktober 2008 Autor Geschrieben 27. Oktober 2008 So, mal weg von artikelnummern usw. Ich habe nun 2 Klassen, person und personalkosten. In der Klasse person habe ich Variablen, die ich in der Klasse personalkosten in einem Vektor sortieren möchte. so, also public class Personalkosten implements Comparable und public int compareTo(Object obj){ Person p = new Person(); return p.abteilung.compareTo(((Person)obj).abteilung); } das ganze um die abteilung der person alphabetisch zu sortieren. nun habe ich das so verstanden, das ich mit Collections.sort(peronal); (wobei personal der vektor ist) den vektor sortieren könnte. Klappt aber nicht, es wird nen Fehler rausgeschmissen. Allerdings ist mir auch nicht ganz klar, wie sich das aufeinander bezieht, hat vielleicht jemand ne Ahnung? Zitieren
Dragon8 Geschrieben 27. Oktober 2008 Geschrieben 27. Oktober 2008 Was für eine Fehlermeldung wird denn ausgegeben? Zitieren
flashpixx Geschrieben 27. Oktober 2008 Geschrieben 27. Oktober 2008 Klappt aber nicht, es wird nen Fehler rausgeschmissen. Allerdings ist mir auch nicht ganz klar, wie sich das aufeinander bezieht, hat vielleicht jemand ne Ahnung? Es ist immer hilfreich die Fehlermeldung zu posten ! Ich würde Compare analog zu meinem Bsp implementieren: public class Individuum implements Comparable<Individuum> { .... public final int compareTo(Individuum poObj) { if ( (poObj == this) || (poObj == null) || (poObj.getClass() != this.getClass()) ) return 0; return (this.gnFitness - poObj.gnFitness > 0.0) ? 1 : -1; } } Zitieren
zNeL Geschrieben 27. Oktober 2008 Autor Geschrieben 27. Oktober 2008 Vielleicht ist das Problem, das die Variablen in der anderen Klasse sind. Also der nicht klar kommt mit der "Person" in meinem compareTo. Fehlermeldung ist: cannot find symbol symbol : variable Collections location: class personalkosten.Personalkosten Collections.sort(personal); Zitieren
zNeL Geschrieben 27. Oktober 2008 Autor Geschrieben 27. Oktober 2008 Also irgendwie... hatte in der falschen Klasse java.util.* importiert :old Sowas bescheuertes... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.