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");