Avatar billede kagehuset Nybegynder
18. januar 2004 - 22:58 Der er 25 kommentarer og
1 løsning

for-løkke problem.

Hey

Jeg har denne sætning:

for (int i = 0; i < levels.length; i++) {
levelItem.addActionListener(ML);
}

...men nu er det sådan at "levelItem" gerne skulle have tilføjet værdien af i - altså f.eks.: levelItem1.addActio.....

Hvordan gør jeg det - levelItem+i.addActi..... virker jo ikke...

mvh
Mads
Avatar billede arne_v Ekspert
18. januar 2004 - 23:00 #1
levelItem skal lave som til et array så !
Avatar billede erikjacobsen Ekspert
18. januar 2004 - 23:00 #2
Item levelItem[] = new Item[levels.length];

for (int i = 0; i < levels.length; i++) {
levelItem[i].addActionListener(ML);
}

Så har du den som fx levelItem[0], osv. (hvis klassen ellers hedder Item)
Avatar billede arne_v Ekspert
18. januar 2004 - 23:00 #3
Så kan du bruge:

for (int i = 0; i < levels.length; i++) {
levelItem[i].addActionListener(ML);
}
Avatar billede erikjacobsen Ekspert
18. januar 2004 - 23:01 #4
Og du tilføjer passende objekter på pladserne i levelItem[]
Avatar billede erikjacobsen Ekspert
18. januar 2004 - 23:04 #5
Du kan fx, hvis du allereded har dem:

  levelItem[0]=levelItem0;

...osv
Avatar billede kagehuset Nybegynder
18. januar 2004 - 23:05 #6
Hey... Det vil ikke rigtigt virke... Det er til en menu hvor man skal kunne vælge level til et spil - level-navnene er så i et array som varierer i længde fra spil til spil... mvh Mads
Avatar billede erikjacobsen Ekspert
18. januar 2004 - 23:07 #7
Ok, så en HashMap måske - kender du den?
Avatar billede kagehuset Nybegynder
18. januar 2004 - 23:08 #8
øhh - nææ - kigger lidt på suns website da...
Avatar billede arne_v Ekspert
18. januar 2004 - 23:08 #9
Arrays bør virke i den beskrevne problem stilling.

Hvis du viser hvordan du har forsøgt at bruge arrays, så kan vi måske
hjælpe.
Avatar billede erikjacobsen Ekspert
18. januar 2004 - 23:10 #10
HashMap h = new HashMap();

//..der skal puttes noget i den:  h.put("levelItem1",etellerandet);

for (int i = 0; i < levels.length; i++) {
((Item)h.get("levelItem"+i)).addActionListener(ML);
}
Avatar billede erikjacobsen Ekspert
18. januar 2004 - 23:11 #11
Men jeg egentlig enig med Arne - hvorfor vil array ikke virke?
Avatar billede kagehuset Nybegynder
18. januar 2004 - 23:13 #12
Hey.. Koden ser således ud:

JMenu levelMenu = new JMenu("Level");
menu.add(levelMenu);
for (int i = 0; i < levels.length; i++) {
JMenuItem levelItem = new JMenuItem("Level: " + i);
}

...hvor det så er meningen af levelItem også skal tilføjes tallet i...
levels er et array med forskellige navne på levels...
Kan godt være det bare er mig der er en spasser - men kan ikke få det til at virke

mvh
Mads
Avatar billede arne_v Ekspert
18. januar 2004 - 23:17 #13
Måske noget a la:

JMenu levelMenu = new JMenu("Level");
menu.add(levelMenu);
JMenuItem[] levelItem = new JMenuItem[levels.length];
for (int i = 0; i < levels.length; i++) {
    levelItem[i] = new JMenuItem("Level: " + i);
}
Avatar billede kagehuset Nybegynder
18. januar 2004 - 23:21 #14
Ahh - bonus!

Tak skal i ha - smid lige et svar i to!

mvh
Mads
Avatar billede erikjacobsen Ekspert
18. januar 2004 - 23:25 #15
Tak, jeg skal ikke have point.
Avatar billede kagehuset Nybegynder
18. januar 2004 - 23:27 #16
hehe - fair nok - det syns jeg aldrig du skal ha - en beskeden herre...
Avatar billede arne_v Ekspert
18. januar 2004 - 23:28 #17
Jeg er lige knap så beskeden ...

:-)
Avatar billede kagehuset Nybegynder
18. januar 2004 - 23:29 #18
Hey igen

Hvis man lige kan nå at stille en hurtig udfordring mere:
Jeg har nogle actionlisteners der lytter på de forskellige menuting man kan vælge - men hvordan skal den lige omformuleres?

for (int i = 1; i <= levels.length; i++) {
else if (menuClicked.equals("Level: " +i)) {
  //kode til at skifte level
}
}

Det er en else if, og det kan man jo ikke ha' med if... mvh Mads
Avatar billede kagehuset Nybegynder
18. januar 2004 - 23:30 #19
uden if skulle der vist have stået...
Avatar billede arne_v Ekspert
18. januar 2004 - 23:37 #20
Jeg kan ikke helt gennemskue konteksten, men jeg har flere gange brugt en
løsning a la:

  public void actionPerformed(ActionEvent ev) {
      for (int i = 0; i < x.length; i++) {
        if (ev.getSource() == x[i]) {
            // brugeren klikkede på x[i]
        }
      }
  }
Avatar billede kagehuset Nybegynder
18. januar 2004 - 23:39 #21
Hey - nææ var vist ikke for tydelig der... Problemet er at der er flere forskellige menupunkter og at de ikke hedder noget med level allesammen.... Men hvis man bare kan smide flere "public void actionevent"'s ind så er de jo en herlig løsning! mvh Mads
Avatar billede arne_v Ekspert
18. januar 2004 - 23:42 #22
Så skal den vel bare udvides:

  public void actionPerformed(ActionEvent ev) {
      for (int i = 0; i < x.length; i++) {
        if (ev.getSource() == x[i]) {
            // brugeren klikkede på x[i]
        }
      }
      for (int i = 0; i < y.length; i++) {
        if (ev.getSource() == y[i]) {
            // brugeren klikkede på y[i]
        }
      }
      for (int i = 0; i < z.length; i++) {
        if (ev.getSource() == z[i]) {
            // brugeren klikkede på z[i]
        }
      }
  }
Avatar billede kagehuset Nybegynder
18. januar 2004 - 23:52 #23
Hey... Det er kun level der er et array... De andre er bare normale statiske menupunkter:

public void actionPerformed(ActionEvent menuClick) {
  if (menuClick.getSource() instanceof JMenuItem) {
  String menuClicked = menuClick.getActionCommand();

  if (menuClick.equals("Restart")) {
    //kode til at genstarte spil
  }

  else if (menuClicked.equals("Open")) {
  //kode til at åbne spil
  }

  ?????????
  for (int i = 1; i <= levels.length; i++) {
    if (menuClicked.equals("Level: " +i)) {
      //kode til at skifte level
  ?????????
    }
  }
}
}
Avatar billede kagehuset Nybegynder
18. januar 2004 - 23:56 #24
Hov - du skulle jo ikke snydes for de andre point!
Avatar billede arne_v Ekspert
18. januar 2004 - 23:58 #25
Tja - det skal sikkert nok virke.

Jeg plejer bare altid at teste på getSource().
Avatar billede kagehuset Nybegynder
19. januar 2004 - 00:06 #26
k - prøver noget - takker!
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