Problema con i metodi

controsenso

Utente Attivo
26 Nov 2014
36
1
0
Per imparare a utilizzare i metodi in Java ho provato a fare un esercizio:
una volta estratti n numeri casuali stampo quello massimo. Il problema è che il risultato del numero massimo è sbagliato.
Qualcuno mi saprebbe spiegare qual'è l'errore?
Grazie!

Questo è il codice:
------------------------------------------------------------------------------------------------------------

package Ripasso;
import java.util.Scanner;


public class Funzioni {
public static void main(String[] args) {
Scanner tastiera = new Scanner(System.in);
int n=0;
int max=0;

do //ciclo che controlla che il numero inserito sia positivo
{
System.out.print("Quanti lanci? ");
n = tastiera.nextInt();

if(n<=0)
System.out.println("Solo valori positivi");
else
break;
}while(true);

for (int i=0;i<n;i++)

System.out.println(numerocasuale()); //stampa dei numeri casuali richiamando il metodo

for (int j=0;j<n;j++)

{
int numero=numerocasuale(); //assegno a una variabile il numero casuale
if (numero>max) //calcolo massimo
max=numero;

}
System.out.println("Massimo" +max); //stampa massimo

}


public static int numerocasuale() //dichiarazione metodo
{
return (int)(1+ Math.random()*1000);
}
}
 
  • Like
Reactions: ottofonsuppost

ottofonsuppost

Utente Attivo
10 Mag 2016
170
13
18
for (int j=0;j<n;j++)
Nel programma è presente questo CICLO FOR che non serve e non fa nulla; utilizza lettera “j”.
Perché il programma da UN MASSIMO SBAGLIATO ???
Per scoprirlo e capire il perché, è sufficiente triplicare la riga che si trova dopo il CICLO FOR, che si serve della lettera “i”

for (int i=0;i<n;i++)

Quindi copiate e TRIPLICATE nel listato del programma questa riga:


System.out.println(numerocasuale()); //stampa dei numeri casuali richiamando il metodo
System.out.println(numerocasuale()); //stampa dei numeri casuali richiamando il metodo
System.out.println(numerocasuale()); //stampa dei numeri casuali richiamando il metodo

Mandando in esecuzione il programma, vi vedrete stampare 3 numeri casuali diversi; il motivo è semplice:
i METODI, in Java, sono pezzi di programma che fanno qualcosa ma che alla fine restituiscono un dato, un valore, e se volete anche oggetti. Siccome NUMEROCASUALE è un numero estratto a sorte, ogni volta che chiameremo il metodo NUMEROCASUALE ci verrà restituito un numero diverso. Ogni riga successiva del programma che richiamerà il metodo NUMEROCASUALE si vedrà restituire un nuovo valore. La prima stampa ha chiamato il metodo(PER LA PRIMA VOLTA), il primo numero estratto richiama il metodo(PER LA SECONDA VOLTA) lo memorizza nella variabile NUMERO e ce lo stampa nello schermo, poi corregge il MASSIMO che era inizialmente a ZERO; il secondo numero estratto richiama il metodo(PER LA TERZA VOLTA) e lo memorizza nella variabile NUMERO e ce lo stampa nello schermo, poi se ritiene che il massimo sia stato superato, lo aggiorna. Non sono le macchine che sbagliano, sono gli uomini che non riflettono su quello che hanno chiesto alla macchina. il programma funzionerebbe se accettiamo di rimanere ciechi e non ci facciamo subito stampare il numero estratto; in quel modo, senza controllo, il primo estratto diventa effettivamente la prima chiamata al metodo, ed il secondo estratto diventa la seconda chiamata al metodo. Baci e abbracci e metodi, OTTONFONSUPPOST.


Dimenticavo di dirvi: ora che vi ho fatto scoprire l'errore contenuto in questo programma, siete tutti bravi a fare i sapientoni e a dire che la cosa era ovvia; elementare; rimane il fatto che questo quesito era qui dal 2014 e nessuno a prima vista è stato in grado di indicare la soluzione. Ari baci, ari abbracci, e arimetodi; OTTOFONSUPPOST.


Eccovi il programma perfettamente funzionante con le modifiche apportate dal grande OTTO;
il progetto chiamatelo Funzioni e la classe porta lo stesso nome.
Date il RUN e inserite il n. 1 e guardate il risultato;
poi ridate il RUN e inserite il n. 2 e guardate il risultato;
poi ridate il RUN e inserite il n. 3 e guardate il risultato.

Baci e abbracci, OTTOFONSUPPOST.

Codice:
import java.util.Scanner;


public class Funzioni {
public static void main(String[] args) {
Scanner tastiera = new Scanner(System.in);
int n=0;
int max=0;

do //ciclo che controlla che il numero inserito sia positivo
{
System.out.print("Quanti lanci? ");
n = tastiera.nextInt();

if(n<=0)
System.out.println("Solo valori positivi");
else
break;
}while(true);

for (int i=0;i<n;i++) 

//System.out.println(numerocasuale()); //stampa dei numeri casuali richiamando il metodo MODIFICA OTTOFONSUPPOST

//for (int j=0;j<n;j++)                                                    MODIFICA OTTOFONSUPPOST

{
int numero=numerocasuale(); //assegno a una variabile il numero casuale
System.out.println("numero "+numero+" MAX "+max); //                       MODIFICA OTTOFONSUPPOST


if (numero>max) //calcolo massimo
max=numero;
System.out.println("numero "+numero+" MAX "+max);//                        MODIFICA OTTOFONSUPPOST
}
System.out.println("Massimo" +max); //stampa massimo

}


public static int numerocasuale() //dichiarazione metodo
{
return (int)(1+ Math.random()*1000);
} 
}
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
N Problema con position absolute e overflow HTML e CSS 4
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
K [PHP] Problema con variabili concatenate. PHP 1
O problema con query PHP 4
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
M Problema con Try Catch PHP 0
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
R problema con else PHP 0
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
G Problema con Get page PHP 4
P Problema con require once PHP 6
P Problema con i package Java 1
A Problema login con Safari PHP 14
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 0
S problema con css bootstrap3 HTML e CSS 4
M .load() problema con caricamenti dinamici di js Javascript 0
G Problema con eccessiva nitidezza apertura Camera Raw Photoshop 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
T problema con select dinamica con jquery Javascript 0
S Problema con spazi bianchi HTML e CSS 5
A PROBLEMA: insert mysqli con dati Tagsinput Presentati al Forum 0
Tommy03 Problema con z-index HTML e CSS 3
M Problema inserimento parole con apostrofo nel db PHP 5
C Problema con dati meteo xml XML 1
S Problema con infrarossi videocamera IP Cam e Videosorveglianza 1
V Problema con librerie allegro5 c++ C/C++ 1
M Problema con php per calcolo costo percentuale PHP 7
S Problema con mysqli_num_rows PHP 18
grgfede Problema javascript con aruba Javascript 1

Discussioni simili