|
| 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
| |
|
|