Newsgroup: it.comp.java
Titolo: calcola se è numero primo

Scusate la domanda che vi sembrerà idiota, ma io sto cercando di
realizzare un programma che dice se un certo numero (in questo caso
14237) è primo. Io ho fatto così, ma il javac mi dà errore (il
dettaglio è in fondo al post). Che ne pensate?
Ciao,
Andrea
class nPrimo {
   public static void main (String[] args) {
     short n;
     n=14237;
     calcN(n);
     if (calcN(n)==true)
// secondo me ho sbagliato qui
    	 System.out.println( n + " e\' un numero primo");
     else 
	System.out.println(n + " non e\' un numero primo");
}
   static boolean calcN(short num) {
    int i;
    for (i=0;i<=32767;i++) {
	if ((num % i == 0) && (i==1 || i==num))  
	     	return true; 
	else
		return false;   
		}
	}
}
questo è il "responso" del javac:
nPrimo.java:13:missing return statement
    static boolean calcN(short num)  {
			  	  ^
1 error.

     static boolean calcN(short num)  {
Leggi il messaggio di errore: "missing return statement" in "calcN".
Devi avere un "return" che sia fuori da qualunque ciclo, if o altro.
Davide

     ^
la funzione calcN non ritorna un valore in ogni percorso.
Devi mettere un return all'esterno del ciclo For.

 dettaglio è in fondo al post). Che ne pensate?
Il tuo programma non fara mai quello che vuoi.
L'errore di compilazione è banale ed è legato al fatto che tu fai un return
boolean dentro un blocco if e lo puoi risolvere semplicemente così.
    static boolean calcN(short num) {
     int i;
boolean ritorno=false;
     for (i=0;i<=32767;i++) {
 if ((num % i == 0) && (i==1 || i==num))
      ritorno=true;
 else
 ritorno=false;
 }
return ritorno
 }
 }
Ma il problema è nella logica del tuo programma: completamente sbagliata!
Un numero è primo solo se è divisibile per 1 e per se stesso.
Tu innanzitutto dividi il numero num per 0! (for i=0...)...erroraccio.
Poi fai una iterazione fino a 32767 che è completamente inutile, visto che
basta fare iterare i=1;i<n.
E poi questa il blocco for è senza logica.Non significa nulla.
Tu così facendo prendi il risultato dell'ultimo confronto indipendentemente
da quello che hai avuto prima (tra l'altro utilizzando tu 32767 cicli
avresti sempre false).

      if (calcN(n)==true)
Aggiungo che il primo calcN(n); non serve a nulla.

 basta fare iterare i=1;i<n.
A regola... basta calcolare fino alla radice quadrata di num!!! Vi è sfuggito a
tutti?
Comunque complimenti al nostro che parrebbe dover fare un progettino
universitario e non sa questa cosina basilare.
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

universitario e non sa questa cosina basilare.
Scusa, non ho capito, ti
riferisci a me?
--------------------------------
Inviato via 
http://usenet.iol.it
 

tutti?
Si hai ragione,è un po che non ho a che fare con
problemini di questo tipo.
Mi era sfuggito.


 riferisci a me?
Y.
Per vedere se un numero n è primo è sufficiente controllare se è
divisibile per un qualsiasi numero >2 e < sqrt(n)


universitario e non sa questa
cosina basilare.
era rivolto a me.
Ciao,
Andrea


 Andrea
Riassumo i vari post precedenti cosi' riesci ad arrivare ad una
soluzione decente!
static boolean calcN(short num) {
    int i;
    for (i=3;i<=Math.sqrt(num);i+=2) { // Nota bene questa
     if (divisibile(num,i)) return false; // e anche questa
    }
    return true;  
}
Ovviamente almeno la funzione divisibile(int,int) te la devi
implementare tu!
Ciao, Gino
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

P.S. Mi ero dimenticato di dirti che la funzione calcNum come
te la ho scritta non controlla se il numero è multiplo di 2, ma nel
tuo caso...


 Ciao, Gino
Ovviamente non c'è bisogno di implementare quella funzione perchè altro non
è che:
(num%i==0)

 era rivolto a me.
Y


Mi pare che questo ng sia accessibile a tutti, non solo ai
super-esperti di Java. O forse mi sbaglio?
Ciao,
Andrea

 super-esperti di Java. O forse mi sbaglio?
Era più un quesito da it.comp.programmare, il Java non c'entra poi molto
con una logica di programmazione errata. E poi questo ng sta veramente
scadendo come qualità di post, tutto per gente che non si legge neppure
il tutorial prima di iniziare a scrivere codice. Il fatto è che mi sei
capitato tu con una domanda semplice come questa. Non ce l'ho con te, è
uno sfogo in generale.


 (num%i==0)
Sì ma se non glielo dicevi ci doveva pensare almeno un po'!


uno sfogo in generale.
Posso capirti, ma lo scopo del ng è anche quello di aiutare i neofiti
a integrarsi nel linguaggio.
Ciao,
Andrea

 Ciao, Gino
Ragazzi volevo solo puntualizzare che in java non esistono le funzioni
ma si parla solo di CLASSI e METODI...
Ciao a tutti :-)

 wrote in message
news:26c12e4a.02041...@posting.google.com...

Se i metodi statici non sono funzioni... vabbč! :)


 }
per la serie siamo tutti precisini:
io il valore di Math.sqrt(num) lo metterei in una variabile
e non lo farei ricalcolare ad ogni iterazione del for
:-)