Frage zu Java Vector

Helios co.

Lt. Commander
Registriert
März 2005
Beiträge
1.863
Hallo @ all,

wie der Titel schon sagt habe ich ein kleines Problem mit der Collection Vector aus Java.
Und zwar habe ich einen Vector mit den Werten von von 1..n (Integer Werte)
folgendermaßen gefüllt.

String s = ""+n (wobei n einer der Werte von 1...n ist)
a.addElement(s) (a ist dabei der Vector)

An einer anderen Stelle des Programms, muss ich aber mit dem Integer Wert den ich im Vector abgelegt habe nochmals arbeiten, und zwar muss ich arithmetische Anweisungen damit durchühren.
Das geht natürlichnicht ohne Weiteres, da es ja im Grunde String Objekte sind.
Gibt es jetzt eine Möglichkeit daraus wieder int Werte zu machen...?

Wäre dankbar für jede Hilfe!
MfG
Andi
 
Hat sich bereits von selbst erledigt.
Trotzdem dankeschön.

Falls es jemanden interessiert, wie ich es gelöst habe:

String s = (String)elementAt(i);
int wert = Integer.parseInt(s);


Grüße
Andi
 
warum schmeisst du dann nicht direkt einfach ein "int" in den Vector??

und vergiss nicht eine Exception zu schmeissen wenn der cast schief geht
 
Ein int kannst Du nicht in nen Vector reinschmeißen, da ein Vector nur Klassen aufnimmt, die von Object abgeleitet sind und int nen einfacher Datentyp ist. Allerdings könnte er die int in Integer-Objekte packen. Das wäre die sauberste Lösung.

Also:
Integer i = new Integer(int);
vect.addElement(i);

Und dann beim Rausholen:
int i = ((Integer)vect.elementAt(index)).intValue();
 
verdammt, darauf hätte ich aber auch wirklich selbst kommen können.
Danke für den Tip!!
 
Und schon habe ich ein neues Problem mit den Vectoren.

Und zwar möchte ich Werte (potentiell unendlich viele) mittels einer for-Schleife in einen vector einfügen.
Ich fülle also mit einer for-Schleife Zahlen von 1..n in Vector1
dasselbe für Vector2...und das klappt auch soweit ganz gut.

Nun möchte ich in einen 3ten Vector ebenfalls Werte einfügen.
Die Werte die ich einfügen möchte sind eine Kombination von Werten, aus den beiden anderen Vectoren.(z.B Addition von den Werten, die sich an einem bestimmten Index in Vector1 und Vector2 befinden)

Doch ich kriege, falls es mehr als 20 Werte werden eine Exception (IndexArrayOutOfBoundsexception)
Anscheinend scheitert das aber nur an Vector3.

Woran könnte das liegen???
Ich dachte, das Vectoren ihre Größe bei Bedarf automatisch vergrößern?!
Deshalb vermute ich, dass durch die for-Schleife auf einen index in Vector3 geschreiben werden will, der so noch nicht vorhanden ist.

Aber ich bin mir nicht sicher.
Hat jemand einen Vorschlag???
Wäre für alles dankbar!!!
 
Wie sieht dien Code aus? Vector vergrößert nur, wenn man mit Add Objekte hinzufügt oder die Größe explizit angibt. Wenn du nur so aus nen Index schreibst kann das ins Auge gehen.
 
Der code sieht in etwa so aus:

Vector.add(index,wert)
index++;

(der Wert setzt sich aus Werten die ich aus 2 anderen Vectoren beziehe)

der index wird ausserhalb der Methode initialisiert.
das komische ist, dass es für 20 Elemente ganz gutr klapp...will ich aber mehr Elemente einfügen, dann kriege ich eine IndexArrayOutOfBoundsException

Das darf bei einem Vector doch aber nicht der passieren?!
 
Hast du mal ein Debug laufen lassen? Um zu sehen, wo genau der Fehler kommt? Vielleicht ist es ja gar nicht im 3. Vektor.
Auszug aus "Java ist auch eine Insel":
boolean add( Object o )
Fügt das Objekt o dem Vektor hinter dem letzten hinzugefügten Element an. Reicht der interne Puffer nicht aus, wird gegebenenfalls der Vektor vergrößert. Der Rückgabewert ist immer true.
void add( int index, Object o )
Fügt das Objekt o dem Vektor an der gewünschten Position index hinzu. Ist kein Platz an der Stelle index, wird eine ArrayIndexOutOfBoundsException ausgelöst.
void addElement( Object o )
Wie add(o).

Also solltest du besser add(wert) machen.
 
Auch mit add(wert) kommt dieselbe Exception.


Einen debugger habe ich noch nicht laufen lassen, aber ich gebe die Werte aus den ersten beiden Vectoren aus...und da läuft es für jede gewünschte Ausgabe perfekt durch.

Was mir aber jetzt gerade aufgefallen ist,:falls es 20 Werte klappt es, wenn 40 klappt es auch, wenn 80 dann auch wieder..160...320...
(und das sind genau die Werte, um die ein Vector automatisch vergrößert wird, falls die Anzahl der einzufügenden Werte die momentane max Anzahl der Werte des Vectors überschreitet)

sind es aber 21 oder 68 oder, sprich eine Anzahl an Werten, die die max Anzahl des Vectors überschreitet, dann klappt es wieder nicht.
d.h. entweder habe ich einen wirklich dicken Fehler drin, oder aber diese dynamischen Datensysteme in Java sind nicht sooo dynamisch.
 
Ich habe jetzt noch einen debugger drüberlaufen lassen.
Und wie es ausschaut wirft doch schon beim Eesten vector eine Exeption, das aber mal am Anfang und macht dann garnichts mehr oder zum Schluss, nachdem alle Werte bereits drin sind oder einfach in der Mitte und fügt nach der Exception munter weiter die restlichen Werte ein.

So sieht mein code dafür aus:

for(int i = 1; i <= n; i++){
Integer x = new Integer(i);
a.add(x);
}

a ist der zu füllende Vector und eingefügt werden Werte von 1..n.
 
Code:
for(int i = 1; i <= n; i++){
Integer x = new Integer(i);
a.add(x);
}

Also am obigen code kann meiner Meinung nach keine 'ArrayIndexOutOfBoundsException' geworfen werden. Bei Vectoren kann man ganz sicher immer einen neuen Wert mit 'add' hinzufügen... und das funktioniert auch, keine Sorge! :D

Ich denke, dass du irgendwo anders einen Fehler haben musst... der code aller drei Vektoren wäre sehr hilfreich!

MfG bene

Edit:
Du hast doch geschrieben, dass sich dein dritter Vector aus den beiden anderen zusammensetzt. Schreib mal den code, wie du die beiden Vectoren ausliest. Meine Vermutung ist, dass du da einen Fehler machst (das erste Element im Vector hat den Index '0'...).
 
Zuletzt bearbeitet:
Das war auch meine Meinung.Hier nun der Code, mit dem ich den 3ten Vector fülle:
(a und b sind die beiden ersten Vectoren die gleich gefüllt sind)

int k = 0;

//berechnen der Werte für Vector c
public void berechnen(int n){

long n1 = a.capacity();

for(int i = 0; i < n1; i++){

int zwischen = i+1;
//System.out.println("Zwischen: "+zwischen);

for(int j = 0; j <= i; j++){

zwischen--;

int x1 = ((Integer)a.elementAt(zwischen)).intValue();
int x2 = ((Integer)b.elementAt(j)).intValue();

//Berechnen der gekürzten Werte
long x3 = ggt(x1,x2);
//System.out.println("GGT: "+ggt(x1,x2));
long a1 = x1/x3;
long a2 = x2/x3;

String s = ""+a1+"/"+a2;

if(!vergleich(s)){

c.add(s);
k++;
}
if(k>=n){
break;
}
}
if(k>=n){
break;
}
}
}
 

Ähnliche Themen

Zurück
Oben