[java] lijst variable lengte met integers

Pagina: 1
Acties:
  • 307 views sinds 30-01-2008
  • Reageer

  • Johnny
  • Registratie: December 2001
  • Laatst online: 16:10

Johnny

ondergewaardeerde internetguru

Topicstarter
Ik haal in Java gegevens uit een database, uit een veld met namen (strings en eentje met hele getallen (integers).

Met een string doe ik dat zo:

code:
1
2
3
4
5
6
7
8
ArrayList listName = new ArrayList();

        while (dbResult.next()) {

            listName.add(dbResult.getString(1));
            
            i++;
        }


Iedere keer wordt er een item aan de arraylist toegevoegd, geen probleem.

Maar als ik dat doe met de integers, met getInt(0) dan gaat het fout omdat een arraylist geen primitieve types zoals int mag bevatten.

Ik zou dus een array moeten gebruiken, maar ik weet de grootte niet vantevoren. dat kan ik oplossen door het bovenstaande stukje code eerst uit te voeren en dan de waarde van i te pakken, maar de array met nummers moet ook in andere methoden binnen dezelfde klasse beschikbaar zijn (om te vergelijken met een integer van de user input), waarvoor ik dus ook weer vantevoren zou moeten weten hoe groot hij is.

Ik moet dus gewoon een arraylist voor integers hebben. Is nu de enige oplossing om ze eerst als string in een arraylist te zetten, dan in de laatste methode de grootte uitlezen, een array aanmaken, alle strings converteren naar int en in de array plaatsen?

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Wrap de int in een http://java.sun.com/j2se/...pi/java/lang/Integer.html
Ik weet trouwens niet of de Java1.5 beta al autoboxing doet, want dan zou dit niet nodig moeten zijn :)
Jup, met Java 1.5 (nu beta) heb je dit probleem niet meer ;) http://jcp.org/aboutJava/...jsr/tiger/autoboxing.html

[ Voor 27% gewijzigd door Glimi op 09-03-2004 00:03 ]


  • BestTested!
  • Registratie: Oktober 2003
  • Laatst online: 18:21
Probeer eens:
Integer myValue = new Integer(blaat);

  • Johnny
  • Registratie: December 2001
  • Laatst online: 16:10

Johnny

ondergewaardeerde internetguru

Topicstarter
Integer, ha dik nog niet aangedacht...

Maar het lijkt niet echt te werken.

Ik heb netjes de import vanboven gezet:
code:
1
import java.lang.Integer;


En dit om gegevens op te halen uit de database:
code:
1
listID.add(dbResult.getInteger(0));


En dat stukje code geeft de volgende fout:
code:
1
2
cannot resolve symbol:
 method getInteger (int)in interface java.sql.ResultSet at line 30, column 33


Ligt het nu aan mij of staat hier dat getInteger() niet kan worden toegepast op een int :?

Verder krijg ik ook een fout met incompatible types als ik een waarde uit de lijst later in een int wil zetten, maar omzetten van Integer naar int doormiddel van Integer.parseInt() geeft ook een fout:
code:
1
2
cannot resolve symbol:
 method parseInt (java.lang.Object)in class java.lang.Integer at line 57, column 26

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

http://java.sun.com/j2se/...i/java/sql/ResultSet.html

ResultSet kent dan ook geen getInteger? :)
En een int uit een Integer halen doe je dmv Integer.intValue, Integer.parseInt maakt van een String een int ;)

  • Johnny
  • Registratie: December 2001
  • Laatst online: 16:10

Johnny

ondergewaardeerde internetguru

Topicstarter
Ja, ik zie het, maar als ik getInt() doe dan wil hij hem niet toevoegen omdat ik dan een int (primitief type) heb in plaats van een Integer.

Ik zie dar wel een getArray staan, maar de omscrhijving daarvan is nogal vaag. Misschien leuk om morgen mee te prutsen.

IK kan geen methode vinden om int om te zetten naar Integer. Dan moet ik weer allerlei conversies doen die imho niet nodig zouden moeten zijn.
En een int uit een Integer halen doe je dmv Integer.intValue, Integer.parseInt maakt van een String een int ;)
Volgens de manual wel. Maar als ik dit doe, krijg ik weer een fout.

code:
1
int rowID = listID.get(i).intValue();


code:
1
2
cannot resolve symbol:
 method intValue ()in class java.lang.Object at line 57, column 32


ik voel me echt heel dom dat zoiets, dat zo simpel lijkt, toch niet op een nette manier werkbaar is te maken

[ Voor 6% gewijzigd door Johnny op 09-03-2004 00:53 ]

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Nvidiot
  • Registratie: Mei 2003
  • Laatst online: 11-01 23:32

Nvidiot

notepad!

get() returnt een java.lang.Object, die moet je even naar een java.lang.Integer casten, en dan intValue() aanroepen

What a caterpillar calls the end, the rest of the world calls a butterfly. (Lao-Tze)


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 26-05 23:14
Johnny schreef op 09 maart 2004 @ 00:51:
ik voel me echt heel dom dat zoiets, dat zo simpel lijkt, toch niet op een nette manier werkbaar is te maken
Dat is niet jouw domheid, maar de onhandigheid van Java op dit punt. Het werkt allemaal wel, maar je moet inderdaad elke keer 'handmatig' tussen ints en Integers converteren en overal waar je een Object krijgt naar Integer casten. Er is in Java 1.4 geen nette manier.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Soultaker schreef op 09 maart 2004 @ 01:35:
[...]

Dat is niet jouw domheid, maar de onhandigheid van Java op dit punt. Het werkt allemaal wel, maar je moet inderdaad elke keer 'handmatig' tussen ints en Integers converteren en overal waar je een Object krijgt naar Integer casten. Er is in Java 1.4 geen nette manier.
Ik neem aan dat je dit al weet, maar voor de rest van de mensen. Vanaf jdk1.5 zit autoboxing ook in het java-pakket. Je hoeft dus zelf niet meer expliciet van en naar primitives te converteren.

Een argument tegen autoboxing is trouwens dat developers zich misschien niet realiseren dat het best wel een kostbare actie is.

[ Voor 3% gewijzigd door Alarmnummer op 09-03-2004 09:19 ]


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

Macros

I'm watching...

Autoboxing zal niet tragere code genereren dan nu het geval is, omdat het alleen een compiler constructie is. In de bytecode wordt er nog genoeg gecast hoor. Even traag als normale Java 1.4 waarschijnlijk. Ik zie geen reden waarom de runtime extra overhead zou moeten krijgen dmv. autoboxing.

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


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Macros schreef op 09 maart 2004 @ 09:34:
Autoboxing zal niet tragere code genereren dan nu het geval is, omdat het alleen een compiler constructie is. In de bytecode wordt er nog genoeg gecast hoor. Even traag als normale Java 1.4 waarschijnlijk. Ik zie geen reden waarom de runtime extra overhead zou moeten krijgen dmv. autoboxing.
Het gaat erom dat developers zich realiseren dat autoboxing een kostbare actie is. Iemand die niet weet dat objecten ervoor aangemaakt worden, kan makkelijk trage code schrijven en zich dus afvragen.. waarom is het in godsnaam zo traag.

[edit]
Ik heb zelf niet zoveel problemen met autoboxing hoor :)

[edit]
Ik zie trouwens dat glimmi mij aan het voorapen was.. spuit elf! :P

[ Voor 18% gewijzigd door Alarmnummer op 09-03-2004 09:44 ]


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Voor de TS:
Je moet dus ervoor zorgen dat je een Integer object aanmaakt met een bepaalde int als waarde. Dat kan zo:
Java:
1
listName.add( new Integer( dbResult.getInt(0) ) );

Zo maak je een [anonieme] instantie van de Integerclasse dmv het aanroepen van de constructor van Integer, welke als parameter een int binnen krijgt :)

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

Johnny schreef op 09 maart 2004 @ 00:51:
Ja, ik zie het, maar als ik getInt() doe dan wil hij hem niet toevoegen omdat ik dan een int (primitief type) heb in plaats van een Integer.
...
IK kan geen methode vinden om int om te zetten naar Integer. Dan moet ik weer allerlei conversies doen die imho niet nodig zouden moeten zijn.
Heel eenvoudig, BestTested! zei het al:
Java:
1
listName.add(new Integer(dbResult.getInt(0)));


En Glimi is natuuuurlijk weer eerder...

[ Voor 5% gewijzigd door Robtimus op 09-03-2004 09:52 ]

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

Pagina: 1