Oppure

Loading
04/07/12 0:38
Archer312
Salve a tutti, in attesa che il libro ordinato mi arrivi, ne sto attualmente leggendo un altro per approfondire i concetti base imparati in giro, a mio parere un buon libro, completo ecc..., ma purtroppo mostra negli esempi cose che magari non spiega in quel determinato capitolo, quindi mi porta inevitabilmente, se voglio capire l'esempio, a cercare da fonti esterne quel determinato metodo che non viene spiegato esattamente li.
Dunque, porgo le seguenti domande sui metodi Math.floor() e Math.random().
Dunque, il metodo Math.floor() arrotonda il numero per difetto e per eccesso?
E allora che differenza c'è fra i codici?

System.out.println((int)(Math.random()*10));

Non arrotonda ugualmente rispetto a:
System.out.println(Math.floor(Math.random()*10));

?
Mentre è corretto scrivere un qualcosa del tipo:
System.out.println((int)Math.floor(Math.random()*10));

?
Ultima modifica effettuata da Archer312 04/07/12 0:44
aaa
04/07/12 7:17
Premoli
Ciao!!

Postato originariamente da Archer312:
System.out.println((int)(Math.random()*10));

Non arrotonda ugualmente rispetto a:
System.out.println(Math.floor(Math.random()*10));



Non sono la stessa cosa sia dal punto di vista logico, sia dal punto di vista del risultato finale, mi spiego meglio nella prima parte tu stai semplicemente facendo un cast da double ad intero nel secondo caso invece stai utilizzando una funzione matematica, in italiano viene chiamata parte intera, che restituisce il più grande intero che sia minore o uguale al'argomento che gli passi... in questo caso ti può sembrare che il risultato sia lo stesso perché in effetti stai provando con numeri positivi, tuttavia se provi con numeri negativi ti accorgerai della differenza ad esempio:

double x = -1.1;
System.out.println((int)(x)); //qui otterrai -1
System.out.println(Math.floor(x)); //qui -2


L'ultima istruzione che hai postato è lecita stai semplicemente facendo un cast da double (la funzione floor restituisce un double) ad int.
aaa
04/07/12 13:06
Archer312
double x = -1.1;
System.out.println((int)(x)); //qui otterrai -1
System.out.println(Math.floor(x)); //qui -2

Dunque, se non ho capito male funziona così, qualora si abbia un numero negativo, il cast eliminerà qualsiasi numero dopo la virgola, a prescindere se sia negativo o positivo, mentre il metodo Math.floor() restituirà il numero minore sempre?
Cioè, se la variabile ha come valore -2.3, restituirà -3, e qui ci siamo, ma quindi questo metodo restituirà SEMPRE il numero minore?
Ultima modifica effettuata da Archer312 04/07/12 13:08
aaa
04/07/12 13:52
Premoli
Semplicemente con il cast converti una qualche variabile da un tipo ad un altro nel nostro caso da double ad int (ti consiglio di leggere qualcosa a riguardo, ci sono un sacco di informazioni su internet)...

floor come già ti ho detto è una funzione matematica che dato un numero reale restituisce il più grande intero minore o uguale al numero in ingresso.

Tutto qui...
aaa
04/07/12 14:47
Archer312
perfetto, grazie!
Ho capito ;).
Spero che il libro nei prossimi capitoli abbia esempi più attinenti alle spiegazioni... :(
aaa