Newsgroup: it.comp.java
Titolo: l'operatore di cast

ciao,
ho terminato la serie di esercizi sui numeri primi e mi è venuta una serie
di dubbi.
sto seguendo un testo e ad un certo punto se ne esce con il calcolo della
radice quadrata.
ho cercato e ho trovato che devo importare java.lang.* cosa che ho fatto
Ho poi messo una variabile double per calcolare la radice quadrata.
double radice = Math.sqrt(numero);
Nota: se non ci fosse stato Internet sarei stato fermo perchè di quanto
sopra per ora il testo non ha mai fatto menzione...
Ora ho dovuto fare un ciclo e ho scoperto che non posso mettere un double
in un int senza forzarlo con l'operatore di cast.
In pratica accetto di perdere la precisione dei dati? 
Facendo questa operazione int i = (int) radice di fatto ridefinisco "al
volo" quanto voglio che venga preso in considerazione della variabile
radice? E' corretto?
Il programma funziona anche con numeri grandi ma vi pare il modo di
presentare degli esercizi senza aver prima introdotto quello di cui si avrà
bisogno?
Scusate lo sfogo ma già è difficile studiare un linguaggio per un neofita,
se ci si mette anche l'imprecisione degli autori sono fritto...
Excelsior
Stefano

 In pratica accetto di perdere la precisione dei dati? 
Radice di 4= 2.000000 nessuna perdita
Radice di 3= 1.73..... con cast diventa = 1
La perdita č inevitabile.
Che ci vuoi fare col tuo numero?
-- 
Emanuele Torrenti
Registered Linux User #409659

 bisogno?
capisco le difficoltà, magari il testo che usi non sarà neanchè un
granchè: il fatto è che quando uno scrive manuali spesso da' per
scontato che le proprie conoscenze "banali" siano anche bagaglio del
resto del mondo... poco male, spesso da soli si impara moltissimo...
cmq tieni presente che quasi ogni cosa ti possa servire in java è già
bella e pronta per l'uso... trovi sempre come fare sul web, al limite
in inglese. Un po' di pazienza e di pratica...

 Che ci vuoi fare col tuo numero?
L'esercizio dice: dato un numero verificare se esso č primo: ridurre il
numero max di iterazioni osservando che se un numero ammette un divisore
allora ammette anche un divisore minore o uguale alla propria 
radice quadrata.
ho fatto cosě:
int numero = in.readInt("Inserisci un numero: ");
                double radice = Math.sqrt(numero); 
 
       //inizio del ciclo
                int resto = 0; 
                for (int i = (int) radice; i > 1; i = i - 1) {
                        resto = numero%i;
                        if (resto == 0)
                                break;
                }
Poi ho fatto un  if (resto == 0) allora non č primo altrimenti sě, ho fatto
altri errori a parte l'aver importato java.lang.*?
Excelsior,
Stefano

 altri errori a parte l'aver importato java.lang.*?
Importare java.lang non è un errore. E' solo una ridondanza.
Cmq puoi ulteriormente ottimizzare l'algoritmo. Ad esempio, solo i 
numeri dispari non ammettono divisore pari. Puoi scartare tutti i numeri 
pari. Inoltre uscire dal for con un break è poco elegante. Puoi 
utilizzare un ciclo while ... do ma non vorrei aggiungere altri problemi 
ai tuoi. Secondo me il tuo libro è perfettibile(ci dici qual è?)
In ogni caso, tutte le mie considerazioni sono raccolte qui, in questa 
classe:
import javax.swing.JOptionPane;
public class Primo {
	public static void main(String[] args) {	
		int numero =Integer.parseInt(JOptionPane.showInputDialog("Inserisci un 
numero"));
		int radice = (int) Math.sqrt(numero);
		int k= 3;
		boolean found=false;
		if(numero % 2 != 0){
			while( (k <= radice) && !found){
				found = (numero % k == 0);
				k+= 2;
			}
		}else
			found=true;
 
		String messaggio="";
		if(found)
			messaggio="Il numero non è primo";
		else
			messaggio="Il numero è primo";
		JOptionPane.showMessageDialog(null, messaggio);
