Originariamente inviato da rossonero922
ho questo metodo
public static boolean isPalin(String pa,int x,int y)
{
if(x>=y)return true;
if(pa.charAt(x)==pa.charAt(y))return isPalin(pa, x+1,y-1);
return false;
}
con x indico la lunghezza minima della stringa,cioè 0.
con y indico la lunghezza massima,cioè pa.lengh()-1.
usando x e y in questo modo mi trovo,la verifica funziona.Tuttavia ho notato un problema. se metto un qualunque x maggiore di y mi dice che la stringa è palindroma...come posso risolvere questo problema?
x e y non sono lunghezze, sono gli indici di due caratteri specifici: il primo e l'ultimo, il secondo e il penultimo ecc...
La condizione x >= y è giusto che lavori così, serve ad interrompere la ricorsione. Se però hai la stringa "ciao" e passi ad esempio 10 e 4 il risultato sarà ovviamente sbagliato. Questo perché la tua funzione isPalin() deve sapere TROPPE cose.
La soluzione è rendere privato quel metodo e fornirne una versione sovraccaricata che passa il minimo indispesabile (la stringa):
codice:
public class MyUtils {
public static boolean isPalin(String s) {
return isPalin(s, 0, s.length() - 1);
}
private static boolean isPalin(String s, int x, int y) {
if (x >= y) {
return true;
}
return s.charAt(x) == s.charAt(y) ? isPalin(s, x + 1, y - 1) : false;
}
}
Poi nel tuo main chiamerai la versione pubblica del metodo, MyUtils.isPalin("ciao");