Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    50

    [JAVA] Massimo elemento di un array:problema

    Salve a tutti, devo creare un programma che faccia immettere all'utente un numero n e che generi n numeri random (compresi tra 0 e 500), calcolandone poi la media e il valore massimo. Il problema che riscontro è nel calcolo del valore massimo. Non ho mai usato un array, l'ho scoperto solo oggi cercando in rete soluzioni al mio problema. Il mio codice è questo (manca la parte relativa al calcolo del max):

    codice:
    import java.util.Random;
    import java.util.Scanner;
    public class NumeriRandom {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		Scanner in = new Scanner(System.in);
    		System.out.println("Inserisci un numero <=100: ");
    		int n = in.nextInt();
    		int somma = 0;
    		int arrayNumeri[];
    		
    		if (n<=100)
    		
    		{Random random = new Random();
    		for(int i = 0; i < n; i++)
    			{
    			int k = random.nextInt(500);
    			System.out.println(k);
    			somma = somma + k;
    			
    			}		
    			
    		//media
    		double media = somma/n;
    		System.out.println("Media dei numeri random: "+ media);
    		
    		//Massimo (da fare)
    		
    		
    		
    		}
    		else System.out.println ("Numero non corretto: riprova");
    		
    	}
    
    }

    Per il valore massimo volevo usare :

    codice:
    int[] arrayNumeri = new int[n];
    		
    		int max=arrayNumeri[0];
    		for(int i=0; i<=arrayNumeri.length-1; i++) {
    	      if( arrayNumeri[i]<max ) {
    	        max=arrayNumeri[i];
    	      }
    	    }
    		System.out.println ("Il valore massimo dell'array è : "+max);
    Però per fare questo ho pensato che dovessi immagazzinare man mano i vari numeri random all'intero dell'array..avendo arrayNumeri = {k1,k2,k3.....ecc}.. e quindi ho provato con questo all'interno del ciclo for (P.s. l'array ovviamente l'ho inizializzato prima):
    codice:
    arrayNumeri = new int[n];
    arrayNumeri[i] = k;
    Chi potrebbe aiutarmi? Grazie!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    La costruzione dell'array è corretta, solo che prima devi riempirlo con tutti i numeri generati random, poi farci le considerazioni. Ovviamente, visto che questi numeri li generi poco sopra, dovrai semplicemente fare in modo che, oltre a stamparli in output, il programma li vada a salvare dentro all'array.

    codice:
    int arrayNumeri[];
    		
    if (n<=100)
    {
       arrayNumeri = new int[n];   // Dimensiono l'array
       Random random = new Random();
       for(int i = 0; i < n; i++)
       {
          int k = random.nextInt(500);
          arrayNumeri[i] = k;   // Salvo nell'array il valore generato
          System.out.println(k);
          somma = somma + k;
       }
       ...
    Ad ogni modo, con questo codice

    codice:
    if( arrayNumeri[i]<max ) {
       max=arrayNumeri[i];
    }
    a dispetto del nome della variabile, ti ritrovi a calcolare il minimo e non il massimo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    50
    Scusate, rettifico. Ce l'ho fatta smanettando un po'. Questo è il risultato:

    codice:
    import java.util.Random;
    import java.util.Scanner;
    public class NumeriRandom {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		Scanner in = new Scanner(System.in);
    		System.out.println("Inserisci un numero <=100: ");
    		int n = in.nextInt();
    		int somma = 0;
    		int arrayNumeri[]= new int[n];
    		
    		if (n<=100)
    		
    		{Random random = new Random();
    		for(int i = 0; i < n; i++)
    			{
    			int k = random.nextInt(500);
    			System.out.println(k);
    			somma = somma + k;
    			arrayNumeri[i] = k; //postazione i (0) abbiamo k
    			}		
    		for (int i=0; i<n; i++) {
    		      System.out.println("arrayNumeri["+i+"] = "+arrayNumeri[i]);
    		    }
    		
    		//media
    		double media = somma/n;
    		System.out.println("Media dei numeri random: "+ media);
    		
    		//Massimo (da fare)
    		int max=arrayNumeri[0];
    		for(int i=0; i<=arrayNumeri.length-1; i++) {
    	      if( arrayNumeri[i]>max ) {
    	        max=arrayNumeri[i];
    	      }
    	    }
    		System.out.println ("Il valore massimo dell'array è : "+max);
    
    		
    		
    		}
    		else System.out.println ("Numero non corretto: riprova");
    		
    	}
    
    }
    Quello che mi chiedo adesso è: c'è un modo alternativo perchè io possa evitare gli array? E' un argomento non ancora affrontato e se la prof ci ha chiesto questo programma credo che intendesse una maniera alternativa, nonostante gli array siano molto comodi a quanto noto.
    P.S. migliorie per il mio codice?


    EDIT: LeleFT ho visto ora, grazie mille per la risposta!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da ReaSanka
    Quello che mi chiedo adesso è: c'è un modo alternativo perchè io possa evitare gli array?
    Sì... effettui tutte le operazioni e i confronti all'interno del ciclo for che usi per generare i numeri random.

    Invece di memorizzare ciascun numero nell'array per poi scorrere questo array ed effettuare il confronto, effettualo subito. Imposta prima di tutto la variabile max al valore Integer.MIN_VALUE (il minimo valore che un intero può assumere) in modo da assicurarti un valore corretto per iniziare:

    codice:
    if (n<=100)
    {
       Random random = new Random();
       int max = Integer.MIN_VALUE;
       for(int i = 0; i < n; i++)
       {
          int k = random.nextInt(500);
          System.out.println(k);
          somma = somma + k;
          if (k > max)
          {
             max = k;
          }
       }
       ...
    PS: dovresti cercare di indentare un po' meglio il codice... ne avresti dei benefici tu per primo.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.