PDA

View Full Version : [J2ME (ma anche JAVA)] Separare consonanti e vocali da una stringa.


Donbabbeo
06-02-2009, 15:28
L'esercizietto è facilissimo, io gli do in pasto una stringa tramite una textfield e questa classe dovrebbe tirarmi fuori una stringa che concateni consonanti e vocali separatamente. Purtroppo non funziona, arriva fino al confronto e qua mi fallisce miseramente, restituendomi un simpaticissimo Java.Lang.NullPointerException.
Qualcuno riesce a risalire all'arcano? Ho provato di tutto, ho letto di tutto, ma non ho trovato nulla che mi aiutasse. A me sembra tutto corretto e terribilmente logico, ma c'è qualcosa che non mi torna.
Potete darmi una mano?

public String calcolaNome(String stringa) {
String consonanti = null;
String vocali = null;
String temp = null;
int lunghezza;

lunghezza = stringa.length();
System.out.println("LUNGHEZZA: " + lunghezza);
System.out.println("STRINGA: " + stringa);
for(int i = 0; i < lunghezza; i++) {
System.out.println("CARATTERE: " + stringa.substring(i, i+1));
temp = stringa.substring(i, i+1);
System.out.println("TEMP: " + temp);
//FINO A QUA GIRA, POI NULLPOINTER EXCEPTION
if (isVocale(temp) == true) {
System.out.println("VOCALI: " + vocali);
vocali.concat(temp);
}
else {
consonanti.concat(temp);
System.out.println("CONSONANTI: " + consonanti);
}
}
return consonanti.concat(vocali);
}

public boolean isVocale(String stringa) {
if (stringa.equals("a") == true) {
return true;
}
else {
return false;
}
}

PS: la classe che si occupa di calcolare la vocale attualmente fa il confronto con la sola lettera "a". Prendetelo per buono, ma inserire tutti e 10 i campi e doverli cambiare ogni volta non mi andava :asd:

Donbabbeo
06-02-2009, 15:35
Uhm... sembra che il problema sia nell'impossibilità di usare concat tra stringhe :confused:

Cioè se io faccio
stringa.concat(stringa2)
con stringa = "mario" e stringa2 = "franco" non funziona dandomi NullPointerException,
mentre se faccio stringa += stringa2 ottengo "mariofranco".

Non dovrebbe funzionare in entrambi i metodi?

wingman87
07-02-2009, 02:28
Ciao, non è proprio così: gli oggetti String sono immutabili, questo significa che se fai
String a="A"
String b="B"
a.concat(b);
l'ultimo concat non modifica a ma restituisce un nuovo oggetto String. Quindi il modo corretto per usarlo nel tuo caso è
a=a.concat(b);
che comunque come hai già notato è uguale a
a+=b;

Riguardo alla nullPointerException del tuo ultimo esempio non saprei, mi sembra un po' strano, prova a postare l'esempio completo. A me questo funziona (e mi sembra normalissimo):
public class Prova{
public static void main(String[] args){
String stringa="mario",stringa2="franco";
stringa.concat(stringa2);
}
}
Comunque sul docs ho trovato questo:
Unless otherwise noted, passing a null argument to a constructor or method in this class will cause a NullPointerException to be thrown.
riferito alla classe String. Quindi gli errori che ottieni potrebbero essere dovuti a questo