/*
Stimulation # 01 - Rastelli Andrea

Problema:
	1) Riempimento di un array, di dimensione qualsiasi, con numeri interi casuali tra 0 e 100.
	
	1.1) Trovare, all'interno dell'array generato, il massimo valore presente.
	1.2) Ordinare, in ordine decrescente, l'array generato.
*/

public class FillAndSortRandomIntegerArray
{
	//Definizione di una costante di tipo intero contenente il numero 20
	static final int DIM = 5;
	
	/*
	Funzione:	findMaxValue
	Firma:		int[] array
	Scopo:		Trovare, all'interno dell'array passato tra i parametri
				il massimo valore contenuto, e stamparlo
	*/
	static void findMaxValue(int[] array)
	{
		//Definizione di una variabile contente il massimo valore
		//La imposto uguale alla prima componente dell'array, di modo che
		//se  il primo elemento quello massimo, la variabile non verr pi modificata
		int max = array[0];
		
		//Ciclo iterativo per lo scorrimento dell'array dall'indice 0 al massimo indice
		//definito da array.length
		for (int i=0; i<array.length; i++)
		{
		
			//Controllo condizionale di flusso
			//Se l'i-esimo indice dell'array  maggiore del valore contenuto
			//nella variabile max, allora si effettua una sovrascrittura
			//del nuovo valore sulla variabile
			if (array[i] > max)
			{
				max = array[i];
			}
		}
		
		//Stampa a schermo del massimo valore trovato.
		System.out.println("Massimo: "+max);
	}
	
	/*
	Funzione:	sortArray
	Firma:		int[] array
	scopo:		Ordinare, in modo decrescente, l'array passato tra i parametri
				e ritornare il nuovo array in output
	*/
	static int[] sortArray(int[] array)
	{
		//variabile d'appoggio usata per la sostituzione
		//del valore maggiore con il valore minore
		int app = 0;
		
		//Ciclo iterativo per lo scorrimento dell'array dalla prima alla penultima posizione
		for (int i=0; i<array.length-1; i++)
		{
		
			//Ciclo iterativo per lo scorrimento dalla i-esima posizione fino
			//all'ultima posizione
			for (int j=i; j<array.length; j++)
			{
			
				//Controllo condizionale di flusso
				//Se l'i-esimo indice del vettore  minore del j-esimo indice
				//allora si provvede a sostituire i due elementi
				if (array[i] < array[j])
				{
					app = array[i];
					array[i] = array[j];
					array[j] = app;
				}
			}
		}
		
		//Valore di ritorno della funzione
		return array;
	}
	
	public static void main(String[] argv)
	{
		//Creazione di un array di dimensioni definite da una costante
		int[] rand_array = new int[DIM];
		
		System.out.println("Array generato con numeri casuali:");
		
		//Ciclo iterativo per lo scorrimento dell'array
		for (int i=0; i<rand_array.length; i++)
		{
			
			//Assegnazione dell'i-esimo indice dell'array con un valore casuale
			//intero, compreso tra 1 e 100
			rand_array[i] = (int)(Math.random() * 100);
			
			//Stampa a schermo del valore generato e memorizzato nell'array
			System.out.println(i+": "+rand_array[i]);
		}
		
		System.out.println("\n\nRicerca del massimo valore presente nell'array: ");
		
		//Esecuzione della funzione: findMaxValue
		findMaxValue(rand_array);
		
		System.out.println("\n\nStampa dell'array ordinato in modo decrescente:");
		
		//assegnazione delle operazioni svolte dalla funziona sortArray
		//nel vettore rand_array, prendendo i valori dall'array stesso
		rand_array = sortArray(rand_array);
		
		//Ciclo iterativo per lo scorrimento del'array
		for (int i=0; i<rand_array.length; i++)
		{
			
			//Stampa a schermo dell'i-esimo indice dell'array
			System.out.println(i+": "+rand_array[i]);
		}
	}
}