Newsgroup: it.comp.java
Titolo: Chi mi aiuta a decifrare questo errore?

Chi mi aiuta a decifrare questo errore?
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String
ind
ex out of range: -1


penso che tu abbia sforato in un array o un alist o cos'altro, non so...
posta del codice e l'errore completo.

il codice della funzione che stavo modificando è questo:
public static void commander(Socket botSock, OutputStream out, String
buffer)
    {
     int tree=0;
     int y=buffer.length();
     int x;
     int spoint=0;
     String strcount;
     String blank=" ";
       for(x=0; tree<=3; x=x+1)
        {
        strcount=buffer.substring(x);
        boolean z = strcount.equals(blank);
        if(z!=false)
           {
           spoint=x;
           tree++;
           };
       }
     spoint=spoint+1;
     String strcommand = buffer.substring(spoint,y);
strcommand.startsWith(":!op")){ 
     System.out.println("I must +o somebody..."); }
     if(strcommand.startsWith(":!join")){ 
           try {
     out.write((new String("join "+strcommand+"\n")).getBytes());
      }catch(IOException e){System.out.println("Can't reply to the Ping"); } }
     System.out.println("owner command");
    } file://end of commander
Il problema si è creato da quando ho aggiunto la variabile tree, il compilatore compila il tutto ma quando vado a dare dei parametri viene fuori questo errore:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: -1
        at java.lang.String.substring(String.java:1480)
        at java.lang.String.substring(String.java:1447)
        at IAbot.commander(funtry.java:137)
        at IAbot.principal(funtry.java:65)
        at IAbot.main(funtry.java:33)

[CUT]
Io farei una cosa del genere (non so se c'e' quella funzione in buffer, ma
hai buone probabilita' che ci sia.)
for(x=0; (x<buffer.length) || (tree<=3); x=++){
  strcount=buffer.substring(x);
  boolean z = strcount.equals(blank);
  if(z!=false){
    spoint=x;
    tree++;
  };
}
Il problema e' che incrementi una variabile e ne testi un'altra! Se non
verifichi mai la condizione nell'if sfori dalla dimensione dell'array e ti
da errore.
Poi, scusa la domanda, ma l'operazione 
  boolean z = strcount.equals(blank);
a che ti serve?
Fai un ciclo for per testare sempre la stessa operazione... spiega quello
che vuoi fare.
[CUT]

 che vuoi fare.
Vorrei risponderti con il flow chart che ho fatto,
cmq scanno la tringa lettera per lettera per trovare uno spazio vuoto.
 e cmq se tolgo la variabile tree il prog va avanti O_o

  e cmq se tolgo la variabile tree il prog va avanti O_o
La programmazione non e' alchimia, ma logica :D prova con qualcosa del
genere
  // crei una funzione nella tua classe e gli passi una stringa, 
  // la scorri carattere per carattere con un ciclo for e se trovi il 
  // carattere che ti serve ritorni true.
  // funziona cosi' : 
  // if findZero("pippo corre") 
  //   //ha trovato lo spazio
  // else
  //   //non ha trovato nulla;
  public boolean findSpace(String s){
    for (int i=0; i<s.length(); i++){
      if (s.charAt(i) == ' ') return true;
    }
    return false;
  }  
Potresti anche generalizzarla passando un altro parametro char c, che
contiene il valore e che confronti...
Scusa la domanda, ma e' un esercizio??


Il concetto è lo stesso, solo che io non conoscevo la funzione charAt...
cmq grazie lo stesso del prezioso aiuto.

 cmq grazie lo stesso del prezioso aiuto.
Se non conosci le funzioni, guarda sull'help di java, ti indica tutti i
metodi e le proprieta' di ogni classe, con tanto di gerarchia di eredita' e
tutto il resto...
Nemmeno io conoscevo quella funzione, tanto per farti rendere conto..
Lo trovi sulsito della sun
java.sun.com
, occhio che il file e' bello grasso!
--
Davide