Erstellen von N Objekten

  • Der Anwender entscheidet wie viele Objekte erzeugt werden sollen

    int anzahl = In.readInt();


    Wenn der Anwender jetzt 10 eingiebt sollen 10 neue Objekte erzeugt werden.

    1.objekt
    2.objekt
    3.objekt
    ....

    Kann mir da bitte wer weiterhelfen ?





  • Einfach mit einer for schleife?

    for(i=0,i<anzahl,i++) {
    new object = blablabab
    }

    Und den index i nimmst halt zur hilfe um die objektnamen zu vergeben

  • Vorzugsweise die Objekte in einen Vector reinschmeissen, sonst sind die ja gleich wieder weg.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • Also das

    Code
    new object = blablabab

    funkt bei mir nicht

    Hab das Problem wie folgt gelöst

    Code
    Objekt[] objs = new Objekt[10]; 
    for(int i = 0; i < objs.length; i++) 
    { 
    objs[i] = new Objekt(); 
    
    
    }



    Aber ich kann die Variablen des Objektes nur so ansprechen

    Code
    System.out.println(objs[i].variable);



    oder

    Code
    System.out.println(objs[1].variable);




    Folgendes geht leider nicht

    Code
    System.out.println(objs1.variable);



  • nachdem objs ein array ist kannst du es nur mit objs[index] ansprechen.

    woher soll er denn objs1 kennen?

    ich würde ein kleines tutorial empfehlen in dem dir die grundzüge deiner angewendeten sprache erläutert werden.

    Patient: "Doctor, doctor, my eye hurts when I poke it with a spoon."
    Doctor: "Don't poke it, then."

  • Würd auch sagen, da fehlts noch an den Grundlagen.

    Guckst du z.B. ...
    http://www.javabuch.de/

    Am besten HTML-Version downloaden (umsonst).


    Ich würde die Elemente dann in irgendeine eine Collection reinpacken und dann kannst sie auch schön über einen Iterator abarbeiten.

    Mathe2: "Ist eine inhomogene Lösung eine Lösung, bei der nix zusammenpasst?"

  • In Sprachen, die Metaprogrammierung besser unterstuetzen,
    ist die Aufgabe recht einfach geloest:

    Code
    #!/usr/bin/ruby
    someString = "aName"
    instance_variable_set '@'+someString, Object.new
    
    
    
    
    print @aName  #=> '#<Object:0xb7c8dc20>'
  • Code
    print @aName  #=> '#<Object:0xb7c8dc20>'

    Einfach ;)?

    Die Bemerkung verstehe ich nicht. Diese Zeile ist ja nicht die Loesung des Problems (diese steht eine Zeile drueber im Aufruf der Methode 'instance_variable_set'). Der print befehl ist nur ein Beispiel fuer die Verwendung des Ergebnisses.

    Vielleicht ist ja die Notation unklahr: Alles nach dem '#' ist in Ruby ein Kommentar, und in diesem Fall soll der Kommentar die Ausgabe beschreiben, naemlich den der Variablen zugewiesenen Wert. und print variable ist ja wohl nicht komplizierter als System.out.print(variable);

    Wenn man die Syntax einer Sprache nicht kennt, ist natuerlich alles kompliziert. ;)


    In Java laesst sich das Problem meiner Meinung nach nur loesen, indem man zur Laufzeit Bytecode generiert und diesen dann mittels Reflection laed. Und das ist fuer mich kompliziert genug um es als praktisch unbrauchbar zu bezeichnen.

  • In Java laesst sich das Problem meiner Meinung nach nur loesen, indem man zur Laufzeit Bytecode generiert und diesen dann mittels Reflection laed. Und das ist fuer mich kompliziert genug um es als praktisch unbrauchbar zu bezeichnen.


    Ich verstehe zwar deinen Ruby-Code nicht, aber noch weniger versteh ich, wie du jetzt draufkommst, dass man hier Reflection verwenden sollte.

    "I don't think that Debian can really compete with Gentoo. Sure it might be okay, but when it comes to dependencies, you probably are still going to have to get them all on your own. Or is there something like portage in the Debian world as well?"

  • Ich verstehe zwar deinen Ruby-Code nicht, aber noch weniger versteh ich, wie du jetzt draufkommst, dass man hier Reflection verwenden sollte.


    Von 'sollte' kann gar nicht die Rede sein, schiesslich habe ich diese Loesung als "praktisch unbrauchbar" bezeichnet.

    Also das Problem:

    Ich bekomme zur Laufzeit einen String, und moechte daraus einen Referenznamen machen.

    Code
    String name = "foo";
    
    
    // some magic
    
    
    //benutze foo als eine referenz, z.B.:
    foo = "Hallo Welt";

    In einer interpretierten Sprache kann man das Problem mit eval loesen.
    Die Ruby Loesung geht im Prinzip so vor. Aber in Java ist der Code zur
    Laufzeit ja nicht mehr vorhanden: Die VM kennt nur noch noch Bytecode.

    Was man also machen muesste ist:

    - Zur Laufzeit ein .class file erstellen, das z.b. eine Klasse
    enthaelt, welche 'foo' als eine oeffentliche, statische variable
    besitzt.

    - Diese Klasse mittels Reflection zur Laufzeit laden und dann die
    Referenz foo mittels 'MyClass.foo' ansprechen.

    Oder gibt es vielleicht einen einfacheren Weg?

  • Ich bekomme zur Laufzeit einen String, und moechte daraus einen Referenznamen machen.

    <wahnsinnig-bloede-frage>

    Was hat das mit der ursprünglichen Problemstellung zu tun? Ich seh da den Zusammenhang irgendwie nicht?! :confused:

    </wahnsinnig-bloede-frage>

  • Zitat von Paulchen


    Was hat das mit der ursprünglichen Problemstellung zu tun?


    Aber ich kann die Variablen des Objektes nur so ansprechen

    Code
    System.out.println(objs[i].variable);

    oder

    Code
    System.out.println(objs[1].variable);

    Folgendes geht leider nicht

    Code
    System.out.println(objs1.variable);

    Wie machst Du aus einem Basisstring "objs" und einem Index "1" einen Referenznamen objs1 ? Dass kommt doch genau auf das von mir beschriebene Problem hinaus oder nicht?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!