Namen van objecten genereren

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • kmsch
  • Registratie: Maart 2009
  • Laatst online: 10-10 14:50
Beste Tweakers,

Voor een schoolopracht moet ik een programma schrijven in Java. Ik moet een serie objecten aanmaken, als volgt:

code:
1
2
3
4
5
6
7
8
9
    Square A1 = new Square("A1");
    Square A2 = new Square("A2");
    Square A3 = new Square("A3");
    Square A4 = new Square("A4");
    Square A5 = new Square("A5");
    Square A6 = new Square("A6");
    Square A7 = new Square("A7");
    Square A8 = new Square("A8");
    Square A9 = new Square("A9");


Dit zou ik echter graag met een loop willen doen, zonder ze in een array te stoppen... Zoiets:

code:
1
2
3
 for (int i = 0 ; i < 10 ; i++) {
Square A(i) = new Square("A" + i);
}


Het zal jullie niets verbazen dat dit niet werkt... Het ("A"+ i) gedeelte werkt overigens prima, maar het A(i) deel geeft me foutmeldingen...

Kunnen jullie me misschien helpen?

Bij voorbaat dank,
Koen

Acties:
  • 0 Henk 'm!

  • Compizfox
  • Registratie: Januari 2009
  • Laatst online: 19:19

Compizfox

Bait for wenchmarks

Waarom wil je dit dan per se? Ook al heb ik specifieke kennis van Java, ik kan je wel vertellen dat je dit niet moet willen en dat een array hier juist perfect voor is.

[ Voor 6% gewijzigd door Compizfox op 11-04-2015 02:10 ]

Gewoon een heel grote verzameling snoertjes


Acties:
  • 0 Henk 'm!

  • diondokter
  • Registratie: Augustus 2011
  • Laatst online: 17:27

diondokter

Dum spiro, spero

Compizfox schreef op zaterdag 11 april 2015 @ 02:09:
ik kan je wel vertellen dat je dit niet moet willen en dat een array hier juist perfect voor is.
Inderdaad, arrays zijn waar je naar wil kijken.
Dit is een tutorial van oracle daarover: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 19:08
Je denkt volledig verkeerd. Wat je moet doen is als volgt:

- Je maakt een array of list aan met een lengte van minimaal 10 elementen
- Je maakt een for loop die 10x draait en bij elke executie een nieuw object in de array/list stopt
- Als je nu je objecten nodig hebt dan loop je gewoon door de array heen. Je spreekt ze dus niet aan met een bepaalde naam

Acties:
  • 0 Henk 'm!

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 04-10 00:19
Met ^^

Ik zou een array gebruiken (lijkt me dat de code in de TS nooit kan werken).

Iets als:

code:
1
2
3
4
5
object[] array = new object[10];

for (int i = 0; i < 10; i++) {
    array[i] = new object();
}

note: C# code

Acties:
  • 0 Henk 'm!

  • xFeverr
  • Registratie: Juni 2011
  • Laatst online: 17:05
Je kunt namen van objecten niet op deze manier 'dynamisch' toewijzen in je source-code. Je zult inderdaad een Square-Array (notatie: Square[]) moeten maken. Met de blokhaken kun je de positie bepalen.

Acties:
  • 0 Henk 'm!

  • kmsch
  • Registratie: Maart 2009
  • Laatst online: 10-10 14:50
Bedankt voor jullie reacties! Heb het nu zo gedaan:

code:
1
2
3
4
5
6
    Square[] horiz1array = new Square[10];

for (int i = 0 ; i < 10 ; i++)   
    {
        horiz1array[i] = new Square(Character.toString((char)('A' + i)) + "1"); 
    }


Ziet er misschien wat vreemd uit met de .toString, maar het werkt gelukkig. Dank u hartelijk :)

Acties:
  • 0 Henk 'm!

  • Compizfox
  • Registratie: Januari 2009
  • Laatst online: 19:19

Compizfox

Bait for wenchmarks

Instantieer je die Squares nou niet twee keer? Eén keer in je declaratie van horiz1array, daarna nog een keer in je for-loop.

[ Voor 5% gewijzigd door Compizfox op 11-04-2015 15:41 ]

Gewoon een heel grote verzameling snoertjes


Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 14-10 14:36
Compizfox schreef op zaterdag 11 april 2015 @ 15:41:
Instantieer je die Squares nou niet twee keer? Eén keer in je declaratie van horiz1array, daarna nog een keer in je for-loop.
Nee hij maakt alleen een square-array van 10 plaatsen aan, dat alloceert alleen geheugenruimte voor 10 stuks van het object, en daarna wordt elke plek gevuld met niets meer dan een "null"-waarde.
Daarna vul je de array weer met nieuwe instanties in plaats van de null-waarde.

Acties:
  • 0 Henk 'm!

  • steveman
  • Registratie: Mei 2001
  • Laatst online: 16:39

steveman

Comfortabel ten onder

De constructie met Character.toString() is nog wel wat apart.

Je kunt ook gewoon:

code:
1
2
3
4
//notice altered for loop values
for (int i = 1 ; i <= 10 ; i++) {
   horiz1array[i] = new Square("A" + i); 
}


Levert wat minder vragen op ;)

Huiswerkopdracht: wat krijg je wanneer je dit zou doen:

code:
1
2
3
4
//notice altered for loop values
for (int i = 0 ; i < 10 ; i++) {
   horiz1array[i] = new Square("A" + i + 1); 
}


:?

"Take the risk of thinking for yourself. Much more happiness, truth, beauty, and wisdom will come to you that way." -Christopher Hitchens | In memoriam? 🏁 ipv kruis!


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:41
Die suggestie werkt niet.

Wel zou je het nog zo kunnen schrijven:
Java:
1
new Square((char)('A' + i) + "1");

Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Soultaker schreef op donderdag 16 april 2015 @ 12:09:
Die suggestie werkt niet.

Wel zou je het nog zo kunnen schrijven:
Java:
1
new Square((char)('A' + i) + "1");
De suggestie van steveman werkt prima en levert "A1", "A2", "A3"... etc. op.

Jouw oplossing levert, net als de aangepaste code van de TS, "A1", "B1", "C1" etc. op.

Wat nou precies de bedoeling is, is niet duidelijk, aangezien TS in de eerste post meldt dat ("A"+i) goed werkt, maar dat zegt ie ook van de latere aanpassing. Beide oplossingen leveren unieke waardes op, dus het kan ook zijn dat ze allebei even goed zijn.

"Any sufficiently advanced technology is indistinguishable from magic."

Pagina: 1