PDA

Visualizza la versione completa : java - confrontare due caratteri?


gioconda
26-03-2003, 12:11
Salve a tutti,
ho un piccolo problema, un esercizio in cui devo verificare se una parola palindrome (leggibile in entrambi i versi, tipo OTTO o ANNA).

Il problema alla fine del codice, mi dice che char can't be redeferenced... che significa? dov' l'errore?

Nell'esercizio distinguo tra frasi con numero di lettere pari e dispari, questo solo il codice per le lettere pari

public class Frase {

public static void main(String args[]) {

int pari;
int dispari;

char ch[]=args[0].toCharArray();

System.out.println(ch.length);

if (ch.length%2<1) {

pari=ch.length/2;
System.out.println(pari);

for(int i=0; i<=pari; i++) {

for (int a=ch.length; a>=pari; a--) {

if (ch[i].equals(ch[a])) {

System.out.println("la frase palindrome");


}

}

}



}

}

}

Grazie 1000

Ciao:cry:

floyd
26-03-2003, 12:24
if (ch[i].equals(ch[a]))
ch[i] un char, tipo di dato primitivo, sui quali non si chiamano i metodi (equals un metodo di String)
if (ch[i] == ch[a])
questo testa l'uguaglianza tra char
:mavieni: :mavieni: :mavieni: :mavieni: :mavieni: :mavieni: :mavieni:

gioconda
26-03-2003, 12:30
ho messo ch[1]==ch[a]
ed in effetti ora non trova pi errori nel codice.

Eseguendolo per, mi restituisce una frase di questo tipo

Exception in thread "main" java.lang.ArrrayIndexOutofBoundsException at Frase.main

sembra che non trovi il main?

per i primi due risultati che chiedo nel codice me li restituisce correttamente

floyd
26-03-2003, 12:44
ArrayIndexOutOfBounds viene creata quando provi ad accedere a un array in una posizione che non esiste
for (int a=ch.length-1; a>=pari; a--)
stavi leggendo l'array in pos 8 quando la lunghezza 8 ma un array parte da 0 e arriva a 7

gioconda
26-03-2003, 12:48
HAAAAAAAAAAAAAAAAAAAA!!!!

Grazie tante, sapevo che l'array parte da zero, ma non avrei mai collegato questo al motivo per cui non funzionava.

Ora tutto chiaro

Grazie 1000:ciauz: :ciauz: :ciauz:

s2000
26-03-2003, 13:02
Cmnq nel programma che hai scritto stampa "la frase e' palindrome" ogni volta che trova una letterea uguale all'altra.

gioconda
26-03-2003, 13:05
si, me ne sono accorta quando ho compilato ed eseguito, spostando la riga al di fuori del ciclo andato a posto

cmq grazie per l'avvertimento

ciao:ciauz:

gioconda
26-03-2003, 21:17
Ho rivisto il codice, e purtroppo non funziona bene,
se invece di otto scrivo ottone, dice comunque che "la frase palindrome"...

ho il dubbio che ci sia un problema nel ciclo for, qualcuno sa da che potrebbe dipendere?

Grazie

s2000
27-03-2003, 00:22
public class Frase {

public static void main(String args[]) {

int pari;
int dispari;
int counter=0;
char ch[]=args[0].toCharArray();

System.out.println(ch.length);

if (ch.length%2<1) {
pari=ch.length/2;
System.out.println(pari);
int a=ch.length-1;

for(int i=0; i<pari; i++) {
if (ch[i]==ch[a]) {
System.out.println("ch.i"+i+": "+ch[i]);
System.out.println("ch.a"+a+": "+ch[a]);
counter++;
}
a--;
}

if(counter==ch.length/2)System.out.println("palindromo");
}
}
}




Cosi funziona..ti ho messo anche delle print aggiuntive che mostrano il confronto delle lettere..

Ciao

gioconda
27-03-2003, 09:16
Grazie mille,

ora mi studio il metodo che hai usato

ciao ciao;)

Loading