Salve, sto svolgendo questo esecizio:
Scrivere un metodo ricorsivo public String cifra(String s, char a, char b), che restituisce una nuova stringa ottenuta da s in cui ogni occorrenza del carattere a è sostituita con un'occorrenza di b.
Esempio: cifra("caparezza", 'a', 'i') deve restituire "cipirezzi".
Codice:
static public String cifra(String s, char a, char b)
{
int i = 0;
String ris = "";
cifraRic(s, a, b, ris, i);
return ris;
}
private static void cifraRic(String s, char a, char b, String nuova, int i)
{
if(i == s.length()-1)
{
if(s.charAt(i) == a)
nuova += b;
else
nuova += s.charAt(i);
return;
}
if(s.charAt(i) == a)
nuova += b;
else
nuova += s.charAt(i);
cifraRic(s, a, b, nuova, ++i);
}
Nel main faccio questo:
public static void main(String[] args)
{
String s = "caparezza";
String ris = cifra(s, 'a', 'i');
System.out.println(ris);
}
Non mi stampa niente. Come mai?
Un'altra cosa:
quello che ho fatto io alla fine non è ciò che viene richiesto nel testo.
Perché questo mi dice che
cifra debba essere ricorsivo, mentre non lo è. Si limita semplicemente a chiamare cifraRic che, invece, è ricorsivo.
Ho fatto così perché altrimenti non saprei come gestire l'inizializzazione dell'indice e della stringa su cui lavoro.
Cioè se facessi una cosa del tipo:
static public String cifra(String s, char a, char b)
{
int i = 0;
String nuova = "";
if(i == s.length()-1)
{
if(s.charAt(i) == a)
nuova += b;
else
nuova += s.charAt(i);
return nuova;
}
if(s.charAt(i) == a)
nuova += b;
else
nuova += s.charAt(i);
i++;
cifra(s, a, b);
}
Non andrebbe bene, perché ogni volta che la funzione richiamasse se stessa,
i tornerebbe a 0 e
nuova = "".
Come potrei fare?
Grazie