/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Flere objekter referere til et unikt objek~
Fra : enrique@obel.auc.dk


Dato : 27-11-01 16:47

Yello

I må undskylde hvis det er et dumt spørgsmål, jeg er nybegynder.

Jeg har to klasser: Airport og Flight.

I Airport har jeg en queue med udgående Flights, bestående af Flight
objekter. I Flight klassen er en methode ved navn getDest() defineret,
denne skal retunere et ny Airport objekt. Men jeg ønsker ikke at lave et nyt Airport objekt
hvis det allerede findes, hvis det findes skal getDest() retunere en referance til det
allerede eksisterende objekt. Er det muligt at se om et objekt findes før
man opretter et nyt med de samme data?

Jeg håber at det giver mening.

--
Mvh. / Kind regards
Henrik Farre < enrique@obel.auc.dk -- http://Welcome.to/Webbench >
- If I where God, I would recompile the penguin with --enable-flying.

 
 
Lars Dam (27-11-2001)
Kommentar
Fra : Lars Dam


Dato : 27-11-01 16:54

On Tue, 27 Nov 2001 16:46:31 +0100, enrique@obel.auc.dk wrote:

>Yello
>
>I må undskylde hvis det er et dumt spørgsmål, jeg er nybegynder.
>
>Jeg har to klasser: Airport og Flight.
>
>I Airport har jeg en queue med udgående Flights, bestående af Flight
>objekter. I Flight klassen er en methode ved navn getDest() defineret,
>denne skal retunere et ny Airport objekt. Men jeg ønsker ikke at lave et nyt Airport objekt
>hvis det allerede findes, hvis det findes skal getDest() retunere en referance til det
>allerede eksisterende objekt. Er det muligt at se om et objekt findes før
>man opretter et nyt med de samme data?

En smule. Du skal, når du opretter det første objekt, gemme det i en
collection, som du så senere kan finde det frem fra.

Evt. gemme det på en alternativ måde. Hvis ikke du selv husker på dem
du har oprettet, så kan du ikke umiddelbart finde dem frem.

Check collections og comparators og den slags sager.

>Jeg håber at det giver mening.


vh. ld
---
"Time is the fire in which we burn"

Enrique (27-11-2001)
Kommentar
Fra : Enrique


Dato : 27-11-01 17:04

Yello

On Tue, 27 Nov 2001 16:54:04 +0100, Lars Dam wrote:

> On Tue, 27 Nov 2001 16:46:31 +0100, enrique@obel.auc.dk wrote:
>
> Evt. gemme det på en alternativ måde. Hvis ikke du selv husker på dem du
> har oprettet, så kan du ikke umiddelbart finde dem frem.

F.eks. smide det hele i et array, og så lave en methode som f.eks.
hvemErDu(); og så lave en sammenligning??

--
Mvh. / Kind regards
Henrik Farre < enrique@obel.auc.dk -- http://Welcome.to/Webbench >
- If I where God, I would recompile the penguin with --enable-flying.

Lars Dam (27-11-2001)
Kommentar
Fra : Lars Dam


Dato : 27-11-01 17:45

On Tue, 27 Nov 2001 17:03:40 +0100, Enrique <enrique@obel.auc.dk>
wrote:

>Yello
>
>On Tue, 27 Nov 2001 16:54:04 +0100, Lars Dam wrote:
>
>> On Tue, 27 Nov 2001 16:46:31 +0100, enrique@obel.auc.dk wrote:
>>
>> Evt. gemme det på en alternativ måde. Hvis ikke du selv husker på dem du
>> har oprettet, så kan du ikke umiddelbart finde dem frem.
>
>F.eks. smide det hele i et array, og så lave en methode som f.eks.
>hvemErDu(); og så lave en sammenligning??

Eksempelvis. Jeg ville nu foretrække en mere dynamisk struktur end et
array. E.g. hashmaps, lister e.l. Tag et kig på collections. De
beskriver også hvordan du implementerer 'hvemErDu()' metoder korrekt i
Java.

vh. ld
---
"Time is the fire in which we burn"

Bertel Lund Hansen (27-11-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 27-11-01 22:47

enrique@obel.auc.dk skrev:

>objekter. I Flight klassen er en methode ved navn getDest() defineret,
>denne skal retunere et ny Airport objekt.

Andre har svaret allerede. Jeg vil blot klargøre nogle ting:

Det må være setDest() der leder efter om en destination findes og
opretter den hvis den er ny. Metoden getDest() skal bare finde
den destination som instansen af Flight har en reference til
(hvis jeg forstår scenariet rigtigt).

>Jeg håber at det giver mening.

Ok ja.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Enrique (28-11-2001)
Kommentar
Fra : Enrique


Dato : 28-11-01 16:46

Yello

On Tue, 27 Nov 2001 22:46:32 +0100, Bertel Lund Hansen wrote:

> Det må være setDest() der leder efter om en destination findes og
> opretter den hvis den er ny. Metoden getDest() skal bare finde den
> destination som instansen af Flight har en reference til (hvis jeg
> forstår scenariet rigtigt).

Ideen er noget i stil med det her (kilden til getDest() v0.2beta!;)

public Airport getDest()
   {
      Flight tmp = (Flight)outgoing.firstElement();// Gets the first Flight
      int destNum = tmp.getDest(); // Gets the unique destination id
      
      int newDistFromStart = distFromStart+1;
      
      /*
      * if destNum exits, don't create a new object, just return the existing
object
      */
      if (regedAirports.containsKey(destNum))
      {
         Airport destAP = (Airport)regedAirports.get(destNum);
         System.out.println("- Airport exists");
      }
      else
      {
         Airport destAP = new Airport(destNum,airportNum,newDistFromStart);
      }
         
      return destAP;
   }

Jeg har nu bare et nyt problem. destNum er en int som konstruktoren i
Airport bruger, men int virker ikke som key i et hashmap, jeg får
følgende compile time fejl:

BreadthFirstSearch.java:132: containsKey(java.lang.Object) in java.util.Map cannot be applied to (int)
if (regedAirports.containsKey(destNum))
^
BreadthFirstSearch.java:134: get(java.lang.Object) in java.util.Map cannot be applied to (int)
Airport destAP = (Airport)regedAirports.get(destNum);
^
BreadthFirstSearch.java:142: cannot resolve symbol
symbol : variable destAP
location: class Airport
return destAP;
^
3 errors

Jeg er hvis ikke i stand til at løse det selv.

--
Mvh. / Kind regards
Henrik Farre < enrique@obel.auc.dk -- http://Welcome.to/Webbench >
- If I where God, I would recompile the penguin with --enable-flying.

Lars Mosegård (28-11-2001)
Kommentar
Fra : Lars Mosegård


Dato : 28-11-01 17:22


"Enrique" <look@mySignature.txt> skrev i en meddelelse
news:pan.2001.11.28.16.45.36.587952.2788@mySignature.txt...
> Jeg har nu bare et nyt problem. destNum er en int som konstruktoren i
> Airport bruger, men int virker ikke som key i et hashmap, jeg får
> følgende compile time fejl:
>
> BreadthFirstSearch.java:132: containsKey(java.lang.Object) in java.util.Map
cannot be applied to (int)
> if (regedAirports.containsKey(destNum))
> ^

'int' er en simpel type og nedarver derfor ikke fra java.lang.Object. Løsning:
Anvend en 'Integer' som key.

Mvh
Lars



Enrique (28-11-2001)
Kommentar
Fra : Enrique


Dato : 28-11-01 17:33

Yello

On Wed, 28 Nov 2001 17:22:13 +0100, Lars Mosegård wrote:


> "Enrique" <look@mySignature.txt> skrev i en meddelelse
> news:pan.2001.11.28.16.45.36.587952.2788@mySignature.txt...
>> Jeg har nu bare et nyt problem. destNum er en int som konstruktoren i
>> Airport bruger, men int virker ikke som key i et hashmap, jeg får
>> følgende compile time fejl:
>>
>> BreadthFirstSearch.java:132: containsKey(java.lang.Object) in
>> java.util.Map
> cannot be applied to (int)
>> if (regedAirports.containsKey(destNum))
>> ^
>
> 'int' er en simpel type og nedarver derfor ikke fra java.lang.Object.
> Løsning: Anvend en 'Integer' som key.

Problemet er så bare at konstruktoren i Airport kræver en int. Er det
muligt at type kaste int til Integer og omvent, jeg har forsøgt, men det
lykkes ikke.

--
Mvh. / Kind regards
Henrik Farre < enrique@obel.auc.dk -- http://Welcome.to/Webbench >
- If I where God, I would recompile the penguin with --enable-flying.

Lars Dam (28-11-2001)
Kommentar
Fra : Lars Dam


Dato : 28-11-01 18:08

On Wed, 28 Nov 2001 17:33:21 +0100, Enrique <look@mySignature.txt>
wrote:

>Yello
>
>On Wed, 28 Nov 2001 17:22:13 +0100, Lars Mosegård wrote:
>
>
>> "Enrique" <look@mySignature.txt> skrev i en meddelelse
>> news:pan.2001.11.28.16.45.36.587952.2788@mySignature.txt...
>>> Jeg har nu bare et nyt problem. destNum er en int som konstruktoren i
>>> Airport bruger, men int virker ikke som key i et hashmap, jeg får
>>> følgende compile time fejl:
>>>
>>> BreadthFirstSearch.java:132: containsKey(java.lang.Object) in
>>> java.util.Map
>> cannot be applied to (int)
>>> if (regedAirports.containsKey(destNum))
>>> ^
>>
>> 'int' er en simpel type og nedarver derfor ikke fra java.lang.Object.
>> Løsning: Anvend en 'Integer' som key.
>
>Problemet er så bare at konstruktoren i Airport kræver en int. Er det
>muligt at type kaste int til Integer og omvent, jeg har forsøgt, men det
>lykkes ikke.

Du kan ikke caste fra en simpel type til et objekt. Integer klassen er
en 'wrapper' klasse til int typen, og du skal derfor danne et Integer
objekt ud fra din int værdi:

Integer integer = new Integer(42);

For at få en int værdi fra et integer objekt:

int i = integer.intValue();


vh. ld
---
"Time is the fire in which we burn"

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408526
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste