Zum Inhalt springen

Vektorfrage + Problem mit Einlesen einer Variable


zNeL

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von flashpixx
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

    }


}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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);

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...