/ 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
Typecasting og Vector.
Fra : kim


Dato : 15-04-03 19:29

Jeg har et newbie spørgsmål ang. hvordan man nemmest typecaster objekter i
en vektor.
Problemet er følgende, uden typecasting (objekterne er af typen VareType):

for (int i=0; i<vdata.size(); i++)
{
if (vdata.elementAt(i).getValue() > vdata.elementAt(x).getValue())
antal++;
}

Jeg tænkte på at løse det som herunder, men kan man gøre det nemmere, f.eks
typecaste
direkte i if-sætningen?

for (int i=0; i<vdata.size(); i++)
{
value1 = (VareType) vdata.elementAt(i);
value2 = (VareType) vdata.elementAt(x);
if (value1.getValue() > value2.getValue())
antal++;
}

Jeg har problemet flere steder i programmet, så gode ideer er ret velkomne.

mvh
Kim



 
 
Lars Dam (15-04-2003)
Kommentar
Fra : Lars Dam


Dato : 15-04-03 19:58

On Tue, 15 Apr 2003 20:29:01 +0200
"kim" <kb999@ofir.dk> wrote:

> Jeg har et newbie spørgsmål ang. hvordan man nemmest typecaster objekter i
> en vektor.
> Problemet er følgende, uden typecasting (objekterne er af typen VareType):
>
> for (int i=0; i<vdata.size(); i++)
> {
> if (vdata.elementAt(i).getValue() > vdata.elementAt(x).getValue())
> antal++;
> }
>
> Jeg tænkte på at løse det som herunder, men kan man gøre det nemmere, f.eks
> typecaste
> direkte i if-sætningen?

Ja da

for (int i=0; i<vdata.size(); i++)
{
if (((VareType)vdata.elementAt(i)).getValue() > ((VareType)vdata.elementAt(x)).getValue())
antal++;
}

Bare hæld godt med paranteser på :)

>
> mvh
> Kim
>

vh. ld

Robert Larsen (15-04-2003)
Kommentar
Fra : Robert Larsen


Dato : 15-04-03 23:59

kim wrote:
> Jeg har et newbie spørgsmål ang. hvordan man nemmest typecaster objekter i
> en vektor.
> Problemet er følgende, uden typecasting (objekterne er af typen VareType):
>
> for (int i=0; i<vdata.size(); i++)
> {
> if (vdata.elementAt(i).getValue() > vdata.elementAt(x).getValue())
> antal++;
> }
>
> Jeg tænkte på at løse det som herunder, men kan man gøre det nemmere, f.eks
> typecaste
> direkte i if-sætningen?
>
> for (int i=0; i<vdata.size(); i++)
> {
> value1 = (VareType) vdata.elementAt(i);
> value2 = (VareType) vdata.elementAt(x);
> if (value1.getValue() > value2.getValue())
> antal++;
> }
>
> Jeg har problemet flere steder i programmet, så gode ideer er ret velkomne.
>
> mvh
> Kim
>
>

Det kan du godt, men en "kønnere" og mere objektorienteret måde et
indkapsle. Der findes endda et Design Pattern kaldet "Adapter", som er
til for at løse dit og lignende problemer. Spørg Google efter en længere
beskrivelse, men kort sagt bruges det til at tilpasse en klasses
interface til dine behov. Et kort eksempel:

import java.util.Vector;

public class VareListe
{
private Vector list;

public VareListe()
{
list = new Vector();
}

public void add(Vare v)
{
list.add(v);
}

public Vare get(int index)
{
return (Vare) list.getElementAt(index);
}

public int size()
{
return list.size();
}
}


Tadaa...en Vector som returnerer Vare-objekter.

VH
Robert


kim (16-04-2003)
Kommentar
Fra : kim


Dato : 16-04-03 14:39

Takker for tipsene:)
Jeg havde prøvet flere gange med paranteser i if-sætningen - men netop ikke
på den måde, det funker:)

mvh
Kim



Martin Kofoed (16-04-2003)
Kommentar
Fra : Martin Kofoed


Dato : 16-04-03 17:20

kim wrote:

> Jeg har et newbie spørgsmål ang. hvordan man nemmest typecaster objekter i
> en vektor.

Sådan her, hvis du spørger mig:

===

Iterator it = vector.iterator();
MitObjekt mit = null;
while (it.hasNext()) {
mit = (MitObjekt) it.next();
if (mit.etEllerAndet()) {
goerNoget();
}
}

===

--

Martin

Roar Gjøsæter (19-04-2003)
Kommentar
Fra : Roar Gjøsæter


Dato : 19-04-03 00:04



Martin Kofoed wrote:

> Sådan her, hvis du spørger mig:
>
> ===
>
> Iterator it = vector.iterator();
> MitObjekt mit = null;
> while (it.hasNext()) {
> mit = (MitObjekt) it.next();
> if (mit.etEllerAndet()) {
> goerNoget();
> }
> }

Er det noen som vet hvor effektiv iteratorer er i forhold til å bruke
vector.toArray og en løkke (at vector.getElement(...) er treg er greit
nok).

Altså hvilken variant er mest effektiv av Martin sin Iterator variant og
denne her:

Object ob[] = vector.toArray();
MitObjekt mit = null;
for( int i=0; i < ob.length; i++){
mit = (MitObjekt)ob[i];
if (mit.etEllerAndet()) {
goerNoget();
}
}


og hva er grunnen til at den ene er raskere en den andre?


Selv bruker eg begge alt etter hva som skal gjøres i løkken.

RAGgen
--
(...)det er en skam for en mann å ha langt hår.
1. Kor. 11:14

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste