Auf einfache weise ints (die verändert werden) in Vector bekommen?



  • Gregor schrieb:

    Arrays in Java und Arrays in C++ sind übrigens nicht gleich bzw. nicht äquivalent.

    Desshalb hab ich ja c++ und java getrennt genannt *g*

    Es tut mir leid 🙂
    Ich hab bis jetzt noch nicht geschaft nen richtiges Tutorial zu lesen. *schäm*

    Ich denke ich benötige 3.)
    Denn ich brauche indizierten Zugriff und ich füge nur beim Initialisieren Elemente dazu, danach nichtmehr.

    Aber wann ist den dann ein Vector angebracht? (Ausser bei MultiThreading?)

    Hättest du denn Spontan einen Link zu den ArrayLists bzw. zum Aufbau der Datenstrukturen?
    -> Aber nur wenn du spontan was rumliegen hast ich such natürlich auch selbst 🙂



  • Gregor schrieb:

    TGGC schrieb:

    Dann mach einfach eine Klasse, die nur einen int-Member hat.

    (Der Tipp war so genial, den musste ich jetzt unbedingt nochmal schreiben. 😉

    Bye, TGGC (Der Held ist zurück)

    Der Tipp war komplett überflüssig, weil es so eine Klasse schon gibt. Die Klasse Integer leistet genau das und sollte jedem bekannt sein, der mit Java programmiert.

    In der Frage steht aber, er möchte Integer nicht nehmen.

    Bye, TGGC (Der Held ist zurück)



  • TGGC schrieb:

    In der Frage steht aber, er möchte Integer nicht nehmen.

    Die Frage war von meiner Seite schlecht gestellt..

    Ich meinte, dass wenn ich Vectoren nehme, dann muss ich aus meinen ints Integer machen. Wenn ich nun aber einen Integer (aus dem Vector) verändern möchte muss ich ihn erst in nen int umwandeln (bzw. den Wert aus dem Integer mit intValue() "herausholen"), nun den int verändern , danach wieder in einen Integer und zum Schluss jenen in den Vector "packen".

    Dies empfand ich als "unschön" dessshalb die Frage ob dies nicht einfacher ginge.

    _Toblerone_



  • Und daher meine Antwort, du machst eine klasse ala:

    class IntPackung
    {
    public int i
    }

    Und dann kannst du die Elemente im Vector auf "einfache weise" ändern:

    ((IntPackung)(vec.elementAt( 5 ) ) ).i+= 5

    Bye, TGGC (Der Held ist zurück)



  • Oh man 🙄
    Sorry, dass ich mal einen sehr alten Thread wieder hoch hole :p

    Wo ist das Problem?
    a) Array kann er nicht nehmen, weil die Größe sich ändert
    b) Es kommt nicht auf Performance an

    Also? Man nimmt doch ein Array, und ändert die Größe 🙄

    01 public int[][] changeSize(int[][] inArray, int inX, int inY, int outX, int outY)
    02 {		
    03   int[][] buf;
    04
    05   try
    06   {
    07     //Ein neues Array mit den gewünschten Maßen erzeugen.
    08     //Achtung: Hier kann es schnell zu einem OutOfMemory
    09     //kommen, daher die try-catch Schleife.
    10     buf = new int[outX][outY];
    11	
    12     for (int X = 0; X < inX; X++)
    13     {
    14       for (int Y = 0; Y < inY; Y++)
    15       {
    16         buf[X][Y] = inA[X][Y];
    17       }					
    18     }	
    19   }
    20   catch (Exception e)
    21   {
    22     return null;
    23   }
    24		
    25   return buf;
    26 }
    

    Man kann es auch ohne Rückgabe machen, indem man am Ende die alte
    Referenz mit dem buf überschreibt...

    Aber das ist ja wohl eine bessere Variante, als der ganze andere
    Kram 🙂



  • Schau dir mal System.Arraycopy an



  • Man kann es auch ohne Rückgabe machen, indem man am Ende die alte
    Referenz mit dem buf überschreibt...

    Nein, kann man nicht, weil die Referenz auf das Array per Value übergeben wird.



  • TGGC schrieb:

    Und daher meine Antwort, du machst eine klasse ala:

    class IntPackung
    {
    public int i
    }

    Und dann kannst du die Elemente im Vector auf "einfache weise" ändern:

    ((IntPackung)(vec.elementAt( 5 ) ) ).i+= 5

    Bye, TGGC (Der Held ist zurück)

    Wenn du dir schon einen eigenen Wrapper schreibst, dann kannst du ihm auch gleich eine Methode a la public void inc(); geben...



  • interpreter schrieb:

    Man kann es auch ohne Rückgabe machen, indem man am Ende die alte
    Referenz mit dem buf überschreibt...

    Nein, kann man nicht, weil die Referenz auf das Array per Value übergeben wird.

    Stimmt, habs gerade probiert 😉 Dachte es würde gehen, weil ein int Array
    auch als Object anerkannt wird, vom der API. Obwohl int kein Object ist!

    Um die Nachfrage gleich im Keim zu ersticken:
    Man kann mit der Methode writeObject() von ObjectOutputStream zum Beispiel
    auch ein int Array schreiben. Hab die Methode jetzt nicht nachgesehen, aber
    ich denke sie wurde so geschrieben 😉



  • interpreter schrieb:

    Schau dir mal System.Arraycopy an

    Ja, geht aber nur mit eindimensionalen Arrays 😉 Und so ist man
    auf der sicheren Seite (mit meinen Code). Wenn es halt nicht auf
    Speed ankommt. Mit einer zusätzlichen Abfrage könte man das
    verkleinern eines Arrays auch noch realisieren.


Anmelden zum Antworten