PDA

View Full Version : [Java]non credo di aver capito bene il return


KNX
20-02-2007, 01:36
Allora, diciamo pure che è un certa ora e che il cervello ha traslocato...

public boolean isStringLC()
{
boolean result = false;
char[] charedStr = this.toCharArray();

for(int i=0;i<charedStr.length;i++)
result = Character.isLowerCase(charedStr[i]) && result;

return result;
}

tanto per fare un esempio, non molto lontano dalla verità comunque...

la mia domanda è: perchè sta maledetta funzione mi ritorna sempre il valore con cui ho inizializzato la variabile result e non il valore che essa assume dopo il ciclo for?

grazie mille

P.S.: ...mi sto già vergognando... :fagiano:
P.P.S.: ...lo giuro!!

KNX
20-02-2007, 02:02
questa roba:

public class mainClass
{
public static void main(String[] args)
{
String greet = "Ciao";
returnString(greet);
}

public static String returnString(String x){
return x;
}
}


a me non produce nulla, non torna nulla, dopo l'esecuzione la console è vuota... :confused:

forse è un bug... o forse sto sognando... :coffee: :eekk: :what: :ncomment:

andbin
20-02-2007, 08:36
public boolean isStringLC()
{
boolean result = false;
char[] charedStr = this.toCharArray();

for(int i=0;i<charedStr.length;i++)
result = Character.isLowerCase(charedStr[i]) && result;

return result;
}

tanto per fare un esempio, non molto lontano dalla verità comunque...

la mia domanda è: perchè sta maledetta funzione mi ritorna sempre il valore con cui ho inizializzato la variabile result e non il valore che essa assume dopo il ciclo for?Perché concettualmente è sbagliato. Si deve inizializzare result a true.

Mi sembra anche abbastanza logico: il metodo isLowerCase restituisce un boolean. Al primo carattere che non è lower-case, ritorna false. Quindi result diventa false da lì in avanti. Altrimenti se tutti i caratteri sono lower-case, allora farà sempre true && true, quindi true.

Tra l'altro, si potrebbe anche ottimizzare cosi:
boolean result = true;
char[] charedStr = this.toCharArray();

for(int i=0; result && i<charedStr.length; i++)
result = Character.isLowerCase(charedStr[i]);

return result;In questo modo al primo false esce dal for.

questa roba:

public class mainClass
{
public static void main(String[] args)
{
String greet = "Ciao";
returnString(greet);
}

public static String returnString(String x){
return x;
}
}


a me non produce nulla, non torna nulla, dopo l'esecuzione la console è vuota... :confused: Ma non hai stampato nulla sulla console. Il valore ritornato da returnString poi si "perde" visto che non lo usi.

franksisca
20-02-2007, 09:10
per stampare su console devi fare in questo modo:
System.out.print(str);
oppure, per stampare e andare a capo
System.out.println(str);

per il discorso delle boolean, conosci la logic a booleana????

se non la conosci, è lì il problema, se hai ancora problemi facci un fischio;)

KNX
20-02-2007, 13:02
Si si si scusate, la logica booleana la conosco... subito dopo aver postato ieri sera ho realizzato che inizializzare result a false avrebbe portato result ad essere sempre false indipendentemete dal valore del primo pezzo della condizione se così vogliamo chiamarlo...

purtroppo, facevo mille prove e non mi accorgevo del fatto che result era inizializzato a false... stendiamo un velo pietoso su ciò che ho postato ieri sera... dimenticatevene ve ne prego :D

soprattutto del secondo dei due post in cui pretendevo che return mi stampasse una stringa... mmmmm... diabolico...

bho non so forse ero ubriaco...

scusatemi ancora :fagiano: