Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    35

    [Java] Problema stupido ciclo

    Inanzitutto scusate l'entità stupida della domanda, ma sono proprio agli inzi con Java (e con la programmazione in generale)

    codice:
           if(!(line2.isEmpty())){
                char[] linea2=line2.toCharArray();
                int j=0;
                while(j<linea2.length){
                    String clienteTemp="";
                    while(linea2[j]!=';' && j<line2.length()){
                        clienteTemp+=linea2[j];
                        System.out.println(linea2[j]+" "+j);
                        j++;
                    }
                    if(j<linea2.length){
                        j++;
                    }
                    waiting=Arrays.copyOf(waiting, waiting.length +1);
                    waiting[waiting.length -1]=clienteTemp;
                }
    }
    Dove line2="De Fabris;Bluastri"

    Quello che mi succede è che mi solleva un eccezione ArraysOutOfBounds a while(linea2[j]!=';' && j<linea2.length), eccezione che scompare se line2="De Fabris;Bluastri;" o ponendo j<linea2.length -1 (restituendomi però Bluastr)

    Sicuramente è una stronzata, ma ci sto sbattendo il grugno e non ne esco fuori, causa anche stanchezza.

    metto pure l'output:

    D 0
    e 1
    2
    F 3
    a 4
    b 5
    b 6
    r 7
    i 8
    s 9
    B 11
    l 12
    u 13
    a 14
    s 15
    t 16
    r 17
    i 18
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 19
    at Dewrapper.unwrapWeeks(Dewrapper.java:82)
    at Dewrapper.buildPacchetto(Dewrapper.java:187)
    at Tester.main(Tester.java:7)
    ci stanno sia nel codice che nell'output varie tracce di "tentativi" di soluzione spesso insensati, scusate questo codice "sproco"

    Grazie mille ^^


    EDIT: Il problema l'ho risolto differentemente, ma mi sapreste dire comunque dov'è l'errore ? Grazie

  2. #2
    Il problema è dato dalla priorità delle condizione messe nel secondo while
    while(linea2[j]!=';' && j<line2.length()){
    Infatti supponendo che linea2.lenght = 3 e j=2 allora entra nel ciclo e incrimenta j a 3 quando va a valutare la prima codizione booleana (linea2[j]!=';') scoppia perchè ovviamente vai oltre la lunghezza dell'array, per risolvero ti basta girare le condizione cioè prima controllare che l'indice non sia maggiore o uguale alla lunghezza dell'array e poi se il carattere.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    potevi postare la soluzione (per non rendere il post totalmente inutile).
    Riguardo al problema: leggi cosa ti dice il compilatore:
    codice:
    java.lang.ArrayIndexOutOfBoundsException
    tenti di accedere ad una locazione non inclusa nell'array che consideri, parlando di stringhe si intende che la stringa è lunga 18 caratteri e tenti di accedere al 19 (cosa non possibile)
    il problema è qui

    codice:
    while(linea2[j]!=';' && j<line2.length()){
                        clienteTemp+=linea2[j];
                        System.out.println(linea2[j]+" "+j);
                        j++;
                    }
                    if(j<linea2.length){
                        j++;
                    }
    in quanto ci sono incrementi selvaggi del tuo contatore, non ho capito bene il problema, ma devi riscrivere bene quel punto

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    35
    Grazie ragazzi, ma ho risolto da solo stamattina, il problema era effettivamente l'ordine delle condizioni, grazie cmq

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.