Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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.

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

@ nekokaburi

genau so hab ich das nun gemacht, klappt nun auch doch ganz sauber, hatte nen kleinen Fehler in der else if abfrage.

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

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.

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

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

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?

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;

    }


}

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

Also irgendwie... hatte in der falschen Klasse java.util.* importiert :old

Sowas bescheuertes...

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.