Toon posts:

[java] elke variabele automatisch aanmaken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met een probleempje, ik ben nog niet zo heel lang bezig met java dus de kans is groot dat het makkelijk op te lossen is.

Ik definieer een hoop objecten:
code:
1
2
3
    private Location rijksm, jordaan, podd, westertoren, navo, eu, atonium, libst, esb, grzro,
                     nintendo, sony, yakuza, restaurant, palace, vaticanCity, colosseum, opera, 
                     airport, kremlin, redsquare, terrHQ, amerHQ;


Waarna ik ze in een methode allemaal dus moet gaan maken (bijv: amsterdam = new Location();, rijksm = new Location(); etc.) Maar dat is niet echt netjes denk ik, Is er een manier om dit allemaal in een lusje te zetten?

Titel moet eigenlijk zijn: Elk object auto aanmaken

[ Voor 5% gewijzigd door Verwijderd op 06-01-2006 18:41 ]


  • XTerm
  • Registratie: Juli 2001
  • Laatst online: 10-06-2025
Je kan ze gewoon achter elkaar zetten met een = tussen. Of in een array.

Dus int a=b=c=d=e=f=g=h=i=j=k=l=m=new int;

  • Gardocki
  • Registratie: Oktober 2000
  • Niet online
Java:
1
private Location kremlin,...., terrHQ, amerHQ = new Location();


Dit werkt ook.

[ Voor 53% gewijzigd door Gardocki op 06-01-2006 18:46 ]

They made me do it.


Verwijderd

Ik kan me niet voorstellen dat je zoveel instanties in verschillende variabelen wilt hebben. Gebruik dan een of andere collection om alles in op te slaan.
Dit werkt ook.
Het werkt ja, maar doet het ook hetzelfde? ;)

[ Voor 21% gewijzigd door Verwijderd op 06-01-2006 18:47 ]


Verwijderd

Topicstarter
XTerm schreef op vrijdag 06 januari 2006 @ 18:42:
Je kan ze gewoon achter elkaar zetten met een = tussen. Of in een array.

Dus int a=b=c=d=e=f=g=h=i=j=k=l=m=new int;
Wat ik vergeten was te vertellen is dat location ook nog een parameter heeft:

Java:
1
2
        amsterdam = new Location("You're now in Amsterdam.");
        brussel = new Location("You're now in Brussel.");


dus de naam van het object moet in een string komen.

[ Voor 5% gewijzigd door Verwijderd op 06-01-2006 18:49 ]


Verwijderd

Verwijderd schreef op vrijdag 06 januari 2006 @ 18:47:
[...]

Wat ik vergeten was te vertellen is dat location ook nog een parameter heeft:

code:
1
2
        amsterdam = new Location("You're now in Amsterdam.");
        brussel = new Location("You're now in Brussel.");


dus de naam van het object moet in een string komen.
Lijkt me een voorbeeldje van slecht ontwerpwerk. Dat je "Amsterdam" of "Brussel" als argument aan de constructor meegeeft, ok. Maar de string "You're now in Amsterdam" moet worden teruggegeven door een methode van het Location object.

En als elk object een unieke naam heeft, kun je echt prima een HashMap of HashSet gebruiken.

Verwijderd

Ik zou alles in een vector knallen...
Java:
1
2
3
4
5
java.util.Vector locations = new java.util.Vector();
String[] locationNames = {"Amsterdam", "Brussel", "Parijs", "Rome", "Lutjebroek"};
for(int i=0; i < locationNames.length; i++) {
    locations = new Location(locationNames[i];
}


zie ook http://java.sun.com/j2se/...api/java/util/Vector.html

[ Voor 12% gewijzigd door Verwijderd op 07-01-2006 18:35 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19-04 14:06

Robtimus

me Robtimus no like you

XTerm schreef op vrijdag 06 januari 2006 @ 18:42:
Je kan ze gewoon achter elkaar zetten met een = tussen. Of in een array.

Dus int a=b=c=d=e=f=g=h=i=j=k=l=m=new int;
Dit werkt met primitives wel maar niet met Objects.
Laten we even kijken wat dit doet, bedenkend dat = rechts associatief is (ik limit me even tot 3).

private Location l1 = l2 = l3 = new Location("bla");
==
private Location (l1 = (l2 = (l3 = new Location("bla"))));

Eerst declareer je l3 en wijst daaraan toe een reference naar een nieuw Location object. Vervolgens gebruik je de waarde van l3 om toe te wijzen aan l2 - l2 en l3 refereren dus naar exact hetzelfde object. Na afloop heb je 3 references naar 1 enkel object. Niet echt de bedoeling he?

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • brama
  • Registratie: Februari 2001
  • Niet online
Verwijderd schreef op vrijdag 06 januari 2006 @ 20:36:
Ik zou alles in een vector knallen...
[java]
java.util.Vector locations = new java.util.Vector();
String[] locationNames = {"Amsterdam", "Brussel", "Parijs", "Rome", "Lutjebroek"};
for(int i=0; i < locationNames.length; i++) {
locations = new Location(locationNames[i];
}
[/java]

zie ook http://java.sun.com/j2se/...api/java/util/Vector.html
Indeed.. en als je het dan toch netjes doet, haal de locaties dan gelijk uit een configfile.

Properties file is het makkelijkst, dan zoiets:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        Properties props = new Properties();
        
        try {
            props.load(new FileInputStream("locations.properties"));
        } catch (IOException e) {
            System.err.println("Failed to load properties file!\n");
            System.exit(1);
        }
        
        String locationStr = props.getProperty("locations");
        String[] locations = locationStr.split(",");
        
        for (int i = 0; i < locations.length; i++)
        {
            System.out.println("Location: " + locations[i] + "\n");
        }


locations.properties moet dan bevatten:

code:
1
locations = amsterdam,brussel,eindhoven,rotjeknor,lutjebroek


Ik heb hier overigens een zeer luie parser geschreven voor het opsplitsen van de plaatsnamen (een komma), die wil je waarschijnlijk wel vervangen door iets wat een tokenizer gebruikt o.i.d.

[ Voor 6% gewijzigd door brama op 06-01-2006 21:04 ]

I mentioned it once, but I think I got away with it.


  • brama
  • Registratie: Februari 2001
  • Niet online
(edit) Per ongeluk 2x gesubmit

[ Voor 98% gewijzigd door brama op 06-01-2006 21:03 ]

I mentioned it once, but I think I got away with it.


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19-04 14:06

Robtimus

me Robtimus no like you

Verwijderd schreef op vrijdag 06 januari 2006 @ 20:36:
Ik zou alles in een vector knallen...
Java:
1
2
3
4
5
java.util.Vector locations = new java.util.Vector();
String[] locationNames = {"Amsterdam", "Brussel", "Parijs", "Rome", "Lutjebroek"};
for(int i=0; i < locationNames.length; i++) {
    locations = new Location(locationNames[i];
}


zie ook http://java.sun.com/j2se/...api/java/util/Vector.html
Goed idee, slechte uitvoering.

locations = new Location(locationNames[i]); gaat nml zo fout als maar kan - je bedoelt natuurlijk locations.add(new Location(locationNames[i]).

Verder is een Map beter omdat je dan makkelijker een specifieke location kan opzoeken:
Java:
1
2
3
4
5
6
Map locations = new HashMap();
String[] locationNames = {"Amsterdam", "Brussel", "Parijs", "Rome", "Lutjebroek"};
for (int i = 0; i < locationNames.length; i++) {
    locations.put(locationNames[i], new Location(locationNames[i]));
}
Location amsterdam = (Location)locations.get("Amsterdam");
Met generics zal het zelfs nog wat makkelijker werken omdat je niet hoeft te casten.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Verwijderd schreef op vrijdag 06 januari 2006 @ 18:46:
Het werkt ja, maar doet het ook hetzelfde? ;)
Hehe, en het antwoord indien het nog niet duidelijk genoeg was is nee.
Tom S. schreef op vrijdag 06 januari 2006 @ 18:45:
Java:
1
private Location kremlin,...., terrHQ, amerHQ = new Location();


Dit werkt ook.
Het werkt idd, maar het doet niet wat TS wil. Enkel amerHQ heeft nu een referentie naar een object van Location; alle overigen, i.e. kremlin, ... terrHQ refereren naar null.

Verwijderd

IceManX schreef op Friday 06 January 2006 @ 21:04:
[...]
Goed idee, slechte uitvoering.

locations = new Location(locationNames[i]); gaat nml zo fout als maar kan - je bedoelt natuurlijk locations.add(new Location(locationNames[i]).

Verder is een Map beter omdat je dan makkelijker een specifieke location kan opzoeken:
Java:
1
2
3
4
5
6
Map locations = new HashMap();
String[] locationNames = {"Amsterdam", "Brussel", "Parijs", "Rome", "Lutjebroek"};
for (int i = 0; i < locationNames.length; i++) {
    locations.put(locationNames[i], new Location(locationNames[i]));
}
Location amsterdam = (Location)locations.get("Amsterdam");
Met generics zal het zelfs nog wat makkelijker werken omdat je niet hoeft te casten.
ja, idd, heel lui voorbeeld gegeven ;) maar ach, dan heeft de poster tenminste nog een beetje het idee dat ie ook nog wat zelf doet :P
En met vectoren kun je overigens ook al heel aardig zoeken zo ver ik weet. Wat beter is hangt denk ik beetje af van wat poster ermee wil... En hij geeft aan nog niet zo lang met java bezig te zijn, dus ik zou zeggen, hou het voorlopig even op vectoren, als je dat helemaal onder de knie hebt kun je met andere list soorten gaan leren werken
Pagina: 1