Toon posts:

[java] operators gebruiken bij vector vraag

Pagina: 1
Acties:

Verwijderd

Topicstarter
in C++ declareer je een vector op de volgende manier:
bijv: vector<int> v;

in java doe je dat zo:
bijv: Vector v;

nou heb ik het volgende stukje code geschreven:

---------------
int max = v.elementAt(0);
for(int x=0;x<v.size();x++)
{
if(v.elementAt(x) > max)
{
max=v.elementAt(x);
}
}

-------------
Naar mij mening ziet het bovenstaande stukje source code vrij logish uit. Maar toch is het fout. Waarom kan ik geen operators gebruiken als >? v.elementAt(x) is het element in positie x. en ik vergelijk het met een int (terwijl ik weet dat alle data in die vector uit alleen ints bestaan)

Hopelijk kunnen jullie mij helpen.

Verwijderd

Allereerst: een Vector gebruik je alleen als je 1 verzameling vanuit meerdere threads wilt aanspreken. In alle andere gevallen is een ArrayList efficienter.

Voor de template notatie uit C++ wordt in Java 5.0 een alternatief geboden in de vorm van Generics. Dat is niet exact hetzelfde, maar wel bruikbaar voor hetzelfde doel.

De code werkt niet omdat een Collection bestaat uit Objecten en een int in Java geen Object is maar een type. Door gebruik te maken van wrapper object Integer, is dit te ondervangen. Het vereist iets meer code om gebruik van te maken.

Waarschijnlijk zul je wat dit betreft de taal C# beter kunnen waarderen dan Java. In deze taal kom je ietsjes verder met de code die je voorstelt.

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Als je de lijst definieert als List<Integer> dan zou het moeten werken. Java heeft vanaf versie 5 ook autoboxing, dus als je een int wil hebben dan zal je die krijgen ook.
Natuurlijk is het wel zo verstandig eerst te begrijpen waarom dit niet werkt. ;)

[ Voor 22% gewijzigd door Gert op 16-11-2004 18:26 ]


Verwijderd

Topicstarter
Bedankt voor de reactie. Ik heb snel door de API van versie 5 gekeken. en ik zie inderdaad dat het mogelijk is in versie 5. ik gebruik momenteel versie 4 (1.4.2).

Kunnen jullie mij meer vertellen over die wrapper? ik kan daar helaas vrij weinig over vinden (heb de API van Object bekeken).

Verder heb ik ook geprobeert te casten naar int maar dat lukt niet.

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Je zou iets moeten lezen over typen en Objecten. :)

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Of ga lekker PHP'en :p

"Beauty is the ultimate defence against complexity." David Gelernter


  • Plecky
  • Registratie: Januari 2004
  • Niet online
[...]
Verder heb ik ook geprobeert te casten naar int maar dat lukt niet.
Zoals al gezegd is int een type en geen object, dus je kan niet casten naar int. Je kan wel casten naar Integer (de wrapper class), waar je vervolgens weer de waarde als int uit kan krijgen.

Dus je doet:
Java:
1
2
3
Object o = v.elementAt(x);
Integer i = (Integer) o;
int j = i.intValue();

Of korter:
Java:
1
int j = ((Integer) v.elementAt(x)).intValue();

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 16:37

Robtimus

me Robtimus no like you

Ik zie dat je elementAt gebruikt; op zich geen problemen mee, maar als je de volgende vertalingstabel gebruikt is het makkelijker een ander type List (bv ArrayList of LinkedList) te gebruiken.

OudNieuw
Object elementAt(int)Object get(int)
void addElement(Object)boolean add(Object)
void insertElementAt(Object, int)void add(int, Object)
void removeElement(Object)boolean remove(Object)
void setElementAt(Object, int)Object set(int, Object)
Enumeration elements()Iterator iterator()
void copyInto(Object[])Object[] toArray(Object[])

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


  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 16:26
Vector ondersteunt in Java 5 toch generics?
Dan zou de volgende code moeten werken:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
Vector<Integer> v = new Vector<Integer>();
...
// v vullen
...
int max = v.elementAt(0);
for(int x=0;x<v.size();x++)
{
   if(v.elementAt(x) > max)
   {
      max=v.elementAt(x);
   }
}

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 13:38
[quote]Plecky schreef op dinsdag 16 november 2004 @ 21:21:
[...]

Andere primitieven kan je wel typecasten naar een int natuurlijk...

code:
1
2
double d = 3,13149265;
int i = (int) d;
Pagina: 1