[java applet] mooie "else and if"

Pagina: 1
Acties:

  • Ruler-Nrg
  • Registratie: Oktober 2006
  • Laatst online: 09:44
eigenlijk een simple vraag, ik ben totaal nieuw met java. heb voor school een mooie apllet geschreven, alleen met gruwelijk lelijk programmeer werk.
Mijn vraag is simpel: kan onderstaande code mooier/ overzichtelijker
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
    }                      
    public void commandAction(Command command, Displayable displayable) {                    
         if (displayable == Kaatsheuvel) {                     
            if (command == backCommand2) {                   
                getDisplay().setCurrent(get_stadkeuze());                        
            } else if (command == screenCommand3) {                      
                getDisplay().setCurrent(get_kh1());                        
            } else if (command == screenCommand4) {                      
            }                       
        } else if (displayable == Breda) {
            if (command == backCommand1) {                     
                getDisplay().setCurrent(get_stadkeuze());                        
            } else if (command == screenCommand5) {                      
                getDisplay().setCurrent(get_moerwijk());                        
            } else if (command == screenCommand7) {                      
                getDisplay().setCurrent(get_deburgt());                        
            } else if (command == screenCommand8) {                      
                getDisplay().setCurrent(get_bischopshoeve());                        
            } else if (command == screenCommand6) {                      
                getDisplay().setCurrent(get_ginnekenweg());                        
            }                       
        } else if (displayable == stadkeuze) {
            if (command == screenCommand1) {                     
                getDisplay().setCurrent(get_Kaatsheuvel());                       
            } else if (command == screenCommand2) {                     
                getDisplay().setCurrent(get_Breda());                        
            } else if (command == exitCommand1) {                      
                exitMIDlet();                        
            }                       
        } else if (displayable == deburgt) {
            if (command == deburgt.DISMISS_COMMAND) {                     
                getDisplay().setCurrent(get_Breda(), get_deburgt());                        
            }                       
        } else if (displayable == ginnekenweg) {
            if (command == ginnekenweg.DISMISS_COMMAND) {                     
                getDisplay().setCurrent(get_Breda(), get_ginnekenweg());                        
            }                       
        } else if (displayable == kh1) {
            if (command == kh1.DISMISS_COMMAND) {                     
                getDisplay().setCurrent(get_Kaatsheuvel(), get_kh1());                        
            }                       
        } else if (displayable == moerwijk) {
            if (command == moerwijk.DISMISS_COMMAND) {                     
                getDisplay().setCurrent(get_Breda(), get_moerwijk());                        
            }                       
        } else if (displayable == bischopshoeve) {
            if (command == bischopshoeve.DISMISS_COMMAND) {                     
                getDisplay().setCurrent(get_Breda(), get_bischopshoeve());                        
            }                       
        }


edit: code erbij is handig :)

[ Voor 63% gewijzigd door Ruler-Nrg op 30-10-2006 10:32 ]

Dell Precision, T9550, 8gb, 64GB ssd, 1920x1200RGB led.


  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • Ruler-Nrg
  • Registratie: Oktober 2006
  • Laatst online: 09:44
verry nice :). .maar niet echt makkelijk.. maar ik ga men best even doen

Dell Precision, T9550, 8gb, 64GB ssd, 1920x1200RGB led.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 14:25

Janoz

Moderator Devschuur®

!litemod

Je zou de boel al een stuk duidelijker maken wanener je fatsoenlijke naamgeving zou gebruiken. screenCommand1 is nu niet echt een handige naamgeving. Daarnaast zie ik dat je data opslaat als programma code ipv datum. Waarom heb je een variabele die moerwijk of khl heet? Tot slot is het in java veel gebruikelijker om cammelcase te gebruiken. Dus ipv get_moerwijk() gewoon getMoerwijk().

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 22:12
A switch works with the byte, short, char, and int primitive data types.
Gaat in dit geval niet werken dus.

Wat me opvalt is dat je eigenlijk maar een paar verschillende dingen doet (vooral getDisplay().setCurrent), alleen dan met andere plaatsen/wijken(?). Dit moet vast wel op een generieke manier te implementeren zijn.

[ Voor 5% gewijzigd door sig69 op 30-10-2006 10:51 ]

Roomba E5 te koop


  • Ruler-Nrg
  • Registratie: Oktober 2006
  • Laatst online: 09:44
switch lijkt me inderdaad niet te werken.

het programma is een winkel vinder. voor een mobiele telefoon. het doel is om per stad, en dan per straat. de winkels te vinden .

ik weet dat de code echt een rotzooi is. het meeste is namenlijk automatiesch gegenereerde code.
Hiervoor heb ik netbeans gerbuikt. het nadeel is alleen dat de apllicatie en het idee zijn goedgekeurd.
Maar dat de code netter en overzichterlijker moet. en dan vooral het gedeelte wat hierboven staat.

Dell Precision, T9550, 8gb, 64GB ssd, 1920x1200RGB led.


  • 4VAlien
  • Registratie: November 2000
  • Nu online

4VAlien

Intarweb!

Maak eerst een boolean of integer variabele om aan te geven of je stadkeuze wil laten zien of een stad.

Dan krijg je
if [stadkeuze] stadkeuzefunctie()
else displaystad()

in displaystad() heb je dan ook nog maar 1x getDisplay().setCurrent(get_stadkeuze()); nodig. Veel meer is er niet te redden denk ik :'(

ps: applet applicatie (dubbel l != dubbel p)

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Wat doen die get_ methoden eigenlijk?

Ik zou zelf denken om de sleutels en de waarden richting een (multidimensionele) List of Map te refactoren. Bijvoorbeeld:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private static Map displayables;

private void loadCommands() { // Roep dit ergens eenmalig aan. Constructor, (static) init blok, ofzo.
    displayables = new HashMap();
    Map kaatsheuvelCommands = new HashMap();
    kaatsheuvelCommands.put(backCommand2, get_stadskeuze());
    kaatsheuvelCommands.put(screenCommand3, get_kh1());
    ...
    displayables.put(Kaatsheuvel, kaatsheuvelCommands);
    ...
}

public void commandAction(Command command, Displayable displayable) {                    
    getDisplay().setCurrent(((Map) displayables.get(displayable)).get(command));
}    
Misschien niet de juiste oplossing in jouw geval, aangezien ik geen idee heb wat die get_ functies nou doen, hoe je aan de variabelen als 'Kaatsheuvel' komt en wat verder de project eisen zijn (kan 'static' in jouw geval kwaad?). Maar dit geeft je wel een idee denk ik :) Je zou die get_ zooi wellicht ook weer kunnen refactoren naar getKeuze(String straatnaam) {}.

[ Voor 8% gewijzigd door BalusC op 30-10-2006 12:04 . Reden: blaat ]


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

BalusC schreef op maandag 30 oktober 2006 @ 11:57:
Wat doen die get_ methoden eigenlijk?

Ik zou zelf denken om de sleutels en de waarden richting een (multidimensionele) List of Map te refactoren. Bijvoorbeeld:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private static Map displayables;

private void loadCommands() { // Roep dit ergens eenmalig aan. Constructor, (static) init blok, ofzo.
    displayables = new HashMap();
    Map kaatsheuvelCommands = new HashMap();
    kaatsheuvelCommands.put(backCommand2, get_stadskeuze());
    kaatsheuvelCommands.put(screenCommand3, get_kh1());
    ...
    displayables.put(Kaatsheuvel, kaatsheuvelCommands);
    ...
}

public void commandAction(Command command, Displayable displayable) {                    
    getDisplay().setCurrent(((Map) displayables.get(displayable)).get(command));
}    
Misschien niet de juiste oplossing in jouw geval, aangezien ik geen idee heb wat die get_ functies nou doen, hoe je aan de variabelen als 'Kaatsheuvel' komt en wat verder de project eisen zijn (kan 'static' in jouw geval kwaad?). Maar dit geeft je wel een idee denk ik :) Je zou die get_ zooi wellicht ook weer kunnen refactoren naar getKeuze(String straatnaam) {}.
Ik zat idd aan dezelfde soort oplossing te denken. Je wil niet steeds die gevallen uitprogrammeren, tenzij je per geval heel specifieke logica wil doen. In de andere gevallen is opzoeken in een Map vaak gemakkelijker, zeker als het dynamisch moet zijn en/of je heel veel gevallen hebt/verwacht.

Fat Pizza's pizza, they are big and they are cheezy


Verwijderd

Het lijkt er op / zou het kunenn zijn dat je een vrij vaste verzameling van plaatsen hebt? dan kan je een "enum" gebruiken. Hier kan je wel switch mee doen.

  • Ruler-Nrg
  • Registratie: Oktober 2006
  • Laatst online: 09:44
Dank voor al uw reacties. Ik ga er mee stoeien. Ik laat wel weten hoe het afloopt

Dell Precision, T9550, 8gb, 64GB ssd, 1920x1200RGB led.

Pagina: 1