Avatar billede baitianlong Nybegynder
02. november 2002 - 13:54 Der er 17 kommentarer og
1 løsning

konkatenering

Hvordan gør jeg det ?

Her er aktivSpiller = 1, og den skal så danne objektet pHand1 og nedenunder skal den køre metoder på den.

if(p == [pHand + aktivSpiller])

----------------------------

[pSvup + aktivSpiller].addCardsFrom([pStik + aktivSpiller], 0, 1);

----------------------------

Hvad gør jeg ? skal jeg oprette en variabel pHand (uden tal), og i så fald er det jo (stadig) en string + en int, der skal blive til et objekt !?! HJÆLP

man kan skrive this[pHand + ... Men så duer det alligevel ikke
Avatar billede soreno Praktikant
02. november 2002 - 13:56 #1
du vil sætte en string og en int sammen ?
altså noget ala:
String temp1 = "1";
int temp2 = 2;

og så sammensætte dem så det bliver
12 (int værdi) ?
Avatar billede soreno Praktikant
02. november 2002 - 13:58 #2
hvis det er tilfældet kan det gøres med:
String temp1 = "1";
int temp2 = 2;
temp1 += "" + temp2;
int samletVærdi = Integer.parseInt(temp1);
Avatar billede baitianlong Nybegynder
02. november 2002 - 13:59 #3
Du kan se i min kode, hvad jeg vil !

i stedet for at skrive:

if(tal == 1) {
  objekt1.gørNoget();
} else if(tal == 2) {
  objekt2.gøtNoget();
}

Vil jeg skrive

[objekt + tal].gørNoget();
Avatar billede soreno Praktikant
02. november 2002 - 14:02 #4
ahh, ok. så skal du oprettet et array af objekter istedet for hver for sig.
altså:
MitObjekt objekt[] = new MitObjekt[12];

for(int i=0;i<objekt.length;i++)
{
  objekt[i] = new MitObjekt(..);
}

switch(tal)
{
  case 1:
    objekt[1].doStuff();
    break;
  case 4:
    objekt[4].doStuff();
    break;
  default:
    //tjaaa ??
    break;   
}
Avatar billede baitianlong Nybegynder
02. november 2002 - 14:08 #5
Måske var mit eksempel dårligt. Dit forslag kræver jo lige så mange linier.

aktivSpiller = 1;
_root["pHand" + aktivSpiller].gørNoget();

Dette er flash kode, og resulterer i at objektet med navn pHand1 bruges. Nøjagtig som hvis man havde skrevet:

_root.pHand1.gørNoget();

Man må kunne gøre det samme i java ?!
Avatar billede soreno Praktikant
02. november 2002 - 14:11 #6
det har vi jo været igennem én gang før ??
http://www.eksperten.dk/spm/269989
Avatar billede soreno Praktikant
02. november 2002 - 14:12 #7
nej, det kan ikke gøres sådan som du gerne vil have.
Avatar billede baitianlong Nybegynder
02. november 2002 - 14:18 #8
Ja. det har vi... Men jeg har åbenbart ikke fattet det endnu !!

I dette tilfælde vil det så sige at jeg skal oprette nogle arrays:

String pHand[] = {"", "pHand1", "pHand2"};

Og kan så senere skrive:

pHand[aktivSpiller].addCardsFrom(pStik[aktivSpiller], 0, 1);

Har jeg forstået det nu (o; ??
Avatar billede soreno Praktikant
02. november 2002 - 14:25 #9
nej, dit eksempel dur ikke..

du opretter et String array og forsøger at aktivere en metode som ikke findes på String (addCards..).
Avatar billede soreno Praktikant
02. november 2002 - 14:26 #10
hov, forresten så kan:
switch(tal)
{
  case 1:
    objekt[1].doStuff();
    break;
  case 4:
    objekt[4].doStuff();
    break;
  default:
    //tjaaa ??
    break; 
}

forkortes til:
objekt[tal].doStuff();

det var lige en tanke bøf.
Avatar billede baitianlong Nybegynder
02. november 2002 - 14:30 #11
Jeg tror faktisk den er der nu. I dette tilfælde skal metoden addCardsFrom køres på et objekt af klassen Pile. Ergo skal jeg skrive...

Pile pHand[] = {"", "pHand1", "pHand2"};

og

pHand[aktivSpiller].addCardsFrom(....................

Er det ikke korrekt ?
Avatar billede soreno Praktikant
02. november 2002 - 14:33 #12
tjaaa, umiddelbart ser det korrekt ud.
jeg er (stadig) ikke sikker på at man kan "liste initialisere" objekter på den måde, derfor skrev jeg:
for(int i=0;i<objekt.length;i++)
{
  objekt[i] = new MitObjekt(..);
}

men, hvis det kan kompilere (og virker) så er det sikkert ok.
Avatar billede baitianlong Nybegynder
02. november 2002 - 14:41 #13
Nej, den er ikke helt vild med det )o;

Jeg har nu skrevet:

Pile pHand[] = new Pile[3];
    Pile pStik[] = new Pile[3];
    Pile pSvup[] = new Pile[3];

    for(int i=0;i<pHand.length;i++) {
      pHand[i] = new pHand();
      pStik[i] = new pStik();
      pSvup[i] = new pSvup();
    }

Det duer ikke. ??
Avatar billede baitianlong Nybegynder
02. november 2002 - 14:45 #14
Det skal selvfølgelig være...

for(int i=0;i<pHand.length;i++) {
      pHand[i] = new Pile();
      pStik[i] = new Pile();
      pSvup[i] = new Pile();
    }

Men den markerer "for" som en fejl, og siger:

An Error occured parsing a type declaration due to expecting type name, the type could not be saved
Avatar billede soreno Praktikant
02. november 2002 - 14:51 #15
dvs. du har skrevet:

    Pile pHand[] = new Pile[3];
    Pile pStik[] = new Pile[3];
    Pile pSvup[] = new Pile[3];

    for(int i=0;i<pHand.length;i++) {
      pHand[i] = new Pile();
      pStik[i] = new Pile();
      pSvup[i] = new Pile();
    }

og så kommer den med fejlen ?

jeg kan ikke se noget forkert i koden..
Avatar billede baitianlong Nybegynder
02. november 2002 - 14:58 #16
Hvis jeg bare skriver:

        Pile pHand[] = new Pile[3];
    Pile pStik[] = new Pile[3];
    Pile pSvup[] = new Pile[3];

      pHand[0] = new Pile();

Markerer den nul, og skriver expecting ] !?!? Hvad sker der ??
Avatar billede soreno Praktikant
02. november 2002 - 15:03 #17
det virker lidt mystisk, for følgende virker fint og er jo faktisk det samme (bort set fra Objekt typerne):

  Object objs[] = new Object[3];
  objs[0] = new Object();

du har ikke tastet 'o' eller 'O' istedet for '0' eller sådan noget ?
Avatar billede baitianlong Nybegynder
02. november 2002 - 15:05 #18
Det var fordi jeg oprettede piles'ne pHand1 osv. i en anden metode også )o;

Den er der nu - mange tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester