Toon posts:

[java] door arrays lopen

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

Verwijderd

Topicstarter
Hallo,

ik ben nogal een n00b in java, en nou moet ik voor iets een stukje code schrijven maar ik kom er niet uit.

het gaat om een soort chatclient met een gebruikerslijst, die lijst komt zo binnen:
list^chatroom^username^userrights^username^userrights^..

Java:
1
2
3
4
5
6
7
8
9
10
11
12
if(ReceiveBuffer.startsWith("list^"))
{
// someone requested the userlist 
// the format of this text will in the future be defineable through HTML
// so users can select their own preferences regarding userlist colors e.d
  String[] listReceivedText = new String[5];
  StringTokenizer listparser = new StringTokenizer(ReceiveBuffer, "^");
  int arrayCounter = 0;
  while (listparser.hasMoreTokens())
 {
  listReceivedText[arrayCounter] = listparser.nextToken();
}


dat heb ik dus al, maar nou moet ik dus een for loop creeren en er doorheen lopen om alle even (2, 4, 6, 8,..) indexen te adden aan een list.
en dat lukt me dus niet :(
ik heb al op google gezocht, en ook hier op tweakers
(keywords for loop array)
maar dat leverde ook niks duidelijks op :( 8)7

[ Voor 5% gewijzigd door Verwijderd op 28-07-2004 15:08 . Reden: layout even weer goed getrokken :) ]


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18

KompjoeFriek

Statsidioot

Ik zou beginnen met je code wat te ordenen,
Door heel simpel netjes in te springen met spaties, ipv met tabs krijg je meteen overzichtelijke code vind ik :) (en [code=java] tags ;))
(en zo vernuek ik de layout niet :P)
Java:
1
2
3
4
5
6
7
8
9
10
11
12
if(ReceiveBuffer.startsWith("list^"))
{
  // someone requested the userlist 
  // the format of this text will in the future be defineable through HTML
  // so users can select their own preferences regarding userlist colors e.d
  String[] listReceivedText = new String[5];
  StringTokenizer listparser = new StringTokenizer(ReceiveBuffer, "^");
  int arrayCounter = 0;
  while (listparser.hasMoreTokens())
  {
    listReceivedText[arrayCounter] = listparser.nextToken();
  }
Wat ik hier zie, is dat je een array opbouwt (of althans probeerd ;)) in listReceivedText. Echter zul je er op deze manier maar maximaal 1 item in dat array krijgen, omdat je index (arrayCounter) altijd 0 blijft :)

WhatPulse! - Rosetta@Home - Docking@Home


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:13

Janoz

Moderator Devschuur®

!litemod

Ten eerste zou ik geen String[] gebruiken, maar gewoon een ArrayList. Het voordeel hiervan is dat een ArrayList meer functionaliteit heeft en automatisch meegroeid waneer deze groter moet worden. Nadeel is echter dat je bij het uitlezen moet gaan casten (mbv (String) ). Dit is gelukkig opgelost in java 1.5.

De daadwerkelijke fout in je code zit in regel 9. Alle tokens worden op positie 0 in het array gezet. Je hoogt immers nergens arrayCounter op.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
ok, ik ga even zoeken in de javadocs voor arraylists
ik snap nu dat ik dus eerst de counter op 0 moet zetten, en dan steeds met counter=counter+2 op moet hogen?

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 11:06

Robtimus

me Robtimus no like you

Verwijderd schreef op 28 juli 2004 @ 13:17:
ok, ik ga even zoeken in de javadocs voor arraylists
ik snap nu dat ik dus eerst de counter op 0 moet zetten, en dan steeds met counter=counter+2 op moet hogen?
+1 is genoeg. Je hebt nml 5 tokens (list niet meegerekend), dus je counter mag nooit hoger dan 4 zijn bij gebruik voor je array. Als je +2 doet krijg je bij het 3e token een ArrayIndexOutOfBoundsException.

Kun je meteen counter++ gebruiken.

[ Voor 4% gewijzigd door Robtimus op 28-07-2004 13:26 ]

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


Verwijderd

Topicstarter
ok, nu heb ik dus:
Java:
1
2
3
4
5
6
7
8
9
10
11
if(ReceiveBuffer.startsWith("list^")){
  String[] ListReceivedText = new String[5];
  StringTokenizer Listparser = new StringTokenizer(ReceiveBuffer, "^");
  int arrayCounter = 0;
  while (Listparser.hasMoreTokens()) {
  ListReceivedText[arrayCounter] = Listparser.nextToken();
  arrayCounter = arrayCounter + 1;
}
  //userlist received, format data and print it to the screen
  nList.addItem(ListReceivedText[2]);
}


maar dat doet dus niets?
het compileert zonder fouten, maar als ik dan list^ binnen krijg van de server, gebeurt er dus niks :'(
(nList is de userlist btw,
als er nou iemand na mij binnenkomt, dan add die m wel netjes aan nList)
Pagina: 1