Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Problemino array

  1. #1
    Utente di HTML.it L'avatar di ViPah
    Registrato dal
    Nov 2008
    Messaggi
    26

    Problemino array

    premetto di essere alle prime armi quindi non insultatemi


    Ho un problema, questo programma deve trovare se una parola è palindroma o no. Ma mi da un errore del cazzo. vi copio il programma (che da javac non ha errori).

    import prog.io.*;


    codice:
    public class Array {
    
    public static void main (String [] args){
    
    ConsoleInputManager in=new ConsoleInputManager();
    
    String s=in.readLine("inserisci frase da analizzare: ");
    
    boolean pali=true;
    
    int l=s.length();
    
    int[] array=new int[l];
    
    for ( i=0; i<=l ; i++)
    
               array[i]= [(s.charAt(i))];
    
    for (int u=0; u<=l; u++)
        if (array[u]==(array[l-u]))  
              pali=true;
        else{
              pali=false;
              break;}
    
    
    
    if (pali)
         System.out.println("la parola e palindroma!");
    else
         System.out.println("la parola non e palindroma!");
    
    }
    }
    l'errore una volta mandato in esecuzione e inserita la parola, è il seguente.


    inserisci frase da analizzare: anna
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
    ex out of range: 4
    at java.lang.String.charAt(Unknown Source)
    at Array.main(Array.java:16)



    Dov'è il problema? :master:

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Come ben evidenziato nel regolamento, il codice va postato all'interno degli appositi tag [[code] e [[/code] e va indentato.

    Ho provato a modificare il tuo post per aggiungere i tag, ma il codice non è comunque indentato.

    Per aiutare le persone a leggere il tuo codice, segui questi consigli.


    Ad ogni modo l'errore è qui:
    codice:
    for ( i=0; i<=l ; i++)
    e va corretto così:
    codice:
    for ( i=0; i<l ; i++)
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di ViPah
    Registrato dal
    Nov 2008
    Messaggi
    26
    Fatto, perdonami

    Ora stampa un messaggio, (sbagliato ) ma da cmq il solito errore che riporto di seguito


    codice:
    inserisci frase da analizzare: anna
    la parola non e palindroma!
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
            at Array.main(Array.java:19)

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da ViPah
    Fatto, perdonami
    E l'indentazione? Se era solo per i tag lo facevo io...

    Ad ogni modo l'errore te l'ho corretto nel post precedente.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di ViPah
    Registrato dal
    Nov 2008
    Messaggi
    26
    il fatto è che quell'errore che vi ho riportato, me lo da con diversi programmi, anche senza l'uso di array :master:

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da ViPah
    il fatto è che quell'errore che vi ho riportato, me lo da con diversi programmi, anche senza l'uso di array :master:
    Gli array non c'entrano niente... tu stai scorrendo una stringa (che potrebbe anche essere vista come un array di caratteri, ma non è questo il caso) e stai cercando di scorrerla dal primo carattere (indice di posizione = 0) fino all'ultimo (indice di posizione = (lunghezza - 1)).

    Tu, invece, vai fino all'indice di posizione (lunghezza), quindi sconfini.

    E la soluzione, ripeto, te l'ho scritta nel mio primo post e va applicata anche al secondo ciclo for che hai usato più avanti..



    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di ViPah
    Registrato dal
    Nov 2008
    Messaggi
    26
    lele, ho corretto, ora stampa un messaggio, sbagliato, e ridà lo stesso errore


    codice:
    inserisci frase da analizzare: anna
    la parola non e palindroma!
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
            at Array.main(Array.java:19)

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da LeleFT
    E la soluzione, ripeto, te l'ho scritta nel mio primo post e va applicata anche al secondo ciclo for che hai usato più avanti..
    Cioè questo:
    codice:
    for (int u=0; u<=l; u++)   // <-- come prima, u < l
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it L'avatar di ViPah
    Registrato dal
    Nov 2008
    Messaggi
    26
    Ho fatto anche quello, ovviamente


    Non va.


    Ho trovato il problema che riesideva nel fatto che attribuivo al char un valore impossibile (charAt(l-i)).

    la sintassi corretta era charAt((l-1)-i)



    grazie comunque!

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da ViPah
    Ho trovato il problema che riesideva nel fatto che attribuivo al char un valore impossibile (charAt(l-i)).

    la sintassi corretta era charAt((l-1)-i)



    grazie comunque!
    A parte il fatto che non vedo charAt((l-1)-i) da nessuna parte...

    In ogni caso, il codice era corretto prima... casomai andava riveduto il controllo del if:
    codice:
    if (array[u]==(array[l-u-1]))
    Sempre per lo stesso discorso: un array di N caratteri ha questo range: [0, N-1].


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.