Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    3

    lavorare con array casuali

    Ciao a tutti, sono nuovo del forum e di Java (seguo un corso base al politecnico).
    Devo creare un metodo max() in modo che mi fornisca il valore massimo di un array casuale (valori da 1 a 20), solamente che ho fatto un po' tanta confusione.. Ecco il mio codice:
    codice:
    import java.util.Arrays;
    
    public class aufgabe13 {
    	public static void main(String[] args) {
    		int n = 6;
    		
    		System.out.println(Arrays.toString(rand(n)));
    		int a = max(n, rand(n));
    		System.out.println(a);
    	}
    	
    	static int[] rand(int n) {
    		int[] rand = new int[n];
    
    		for (int i = 0; i < n; i++) {
    			rand[i] = (int) (Math.random() * 20 + 1);
    		}
    		return rand;
    	}
    	
    	static int max(int n, int[] rand) {
    		Arrays.sort(rand(n));
    		return rand(n)[rand(n).length - 1];
    	}
    
    }
    L'output è del tipo:
    [11, 3, 7, 4, 3, 9]
    15

    immagino l'errore sia dovuto dal fatto che il metodo max() genera un array casuale per conto suo e il comando System.out.println ne generi un altro, perciò viene tutto sbagliato.. Qualcuno sa spiegarmi dove sbaglio? Grazie mille in anticipo :P

  2. #2

    Re: lavorare con array casuali

    Originariamente inviato da david23
    Ciao a tutti, sono nuovo del forum e di Java (seguo un corso base al politecnico).
    Devo creare un metodo max() in modo che mi fornisca il valore massimo di un array casuale (valori da 1 a 20), solamente che ho fatto un po' tanta confusione.. Ecco il mio codice:
    codice:
    import java.util.Arrays;
    
    public class aufgabe13 {
    	public static void main(String[] args) {
    		int n = 6;
    		
    		System.out.println(Arrays.toString(rand(n)));
    		int a = max(n, rand(n));
    		System.out.println(a);
    	}
    	
    	static int[] rand(int n) {
    		int[] rand = new int[n];
    
    		for (int i = 0; i < n; i++) {
    			rand[i] = (int) (Math.random() * 20 + 1);
    		}
    		return rand;
    	}
    	
    	static int max(int n, int[] rand) {
    		Arrays.sort(rand(n));
    		return rand(n)[rand(n).length - 1];
    	}
    
    }
    L'output è del tipo:
    [11, 3, 7, 4, 3, 9]
    15

    immagino l'errore sia dovuto dal fatto che il metodo max() genera un array casuale per conto suo e il comando System.out.println ne generi un altro, perciò viene tutto sbagliato.. Qualcuno sa spiegarmi dove sbaglio? Grazie mille in anticipo :P
    Innanzitutto non vedo perché ordinare l'array...l'algoritmo dovrebbe essere:

    -generi l'array di elementi casuali
    -lo scorri elemento per elemento alla ricerca del massimo

    ti basta una variabile per memorizzare la posizione del massimo da inizializzare con il primo elemento ed aggiornare durante lo scorrimento se trovi un valore più alto. Ovviamente l'algoritmo trova l'ultimo elemento dell'array dal valore più alto in caso ce ne sia più di uno.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3

    Re: Re: lavorare con array casuali

    crea un array di interi ed inserisci valori random per ogni elemento, crea una variabile int che utilizzerai per il confronto con tutti gli elementi dell'array, assegna alla variabile il valore dell'elemento[0] dell'array, scorri l'intero array con un ciclo e confronta la variabile con i vari elementi dell'array...
    se l'elemento dell'array è > della variabile allora copia il valore dell'elemento nella variabile e prosegui il ciclo.

    Ovviamente l'algoritmo trova l'ultimo elemento dell'array dal valore più alto in caso ce ne sia più di uno.
    se lo scambio viene fatto con l'operatore > e due elementi fossero uguali, allora max sarebbe l'elemento più vicino all'inizio dell'array.

  4. #4

    Re: Re: Re: lavorare con array casuali

    Originariamente inviato da Davdx
    se lo scambio viene fatto con l'operatore > e due elementi fossero uguali, allora max sarebbe l'elemento più vicino all'inizio dell'array.
    Non vedo come...forse non ho capito cosa intendi ma mi pare che l'algoritmo da te suggerito sia esattamente identico a quello che ho suggerito io, direi che inm caso di uguaglianza si ottiene il più vicino alla fine non all'inizio
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    no, se lo scambio viene fatto SOLO se il prossimo elemento è > ...
    esempio:
    array[0]=5;
    array[1]=2;
    array[2]=15;
    array[3]=15;
    array[4]=9;

    max=array[0];
    nel confronto con array[1] il valore resta array[0]
    nel confronto con array[2] il valore diventa array[2]
    nel confronto con array[3] visto che array[3] non è maggiore ma uguale il valore resta array[2]
    nel confronto con array[4] il valore resta array[2]

    alla fine del ciclo max sarà uguale a array[2].

  6. #6
    Originariamente inviato da Davdx
    no, se lo scambio viene fatto SOLO se il prossimo elemento è > ...
    esempio:
    array[0]=5;
    array[1]=2;
    array[2]=15;
    array[3]=15;
    array[4]=9;

    max=array[0];
    nel confronto con array[1] il valore resta array[0]
    nel confronto con array[2] il valore diventa array[2]
    nel confronto con array[3] visto che array[3] non è maggiore ma uguale il valore resta array[2]
    nel confronto con array[4] il valore resta array[2]

    alla fine del ciclo max sarà uguale a array[2].
    Ah in quel senso..si hai ragione, ed è pure più efficiente
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #7
    ero sicuro ci fossimo fraintesi

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    3

    Re: Re: lavorare con array casuali

    Originariamente inviato da unomichisiada
    Innanzitutto non vedo perché ordinare l'array...l'algoritmo dovrebbe essere:

    -generi l'array di elementi casuali
    -lo scorri elemento per elemento alla ricerca del massimo

    ti basta una variabile per memorizzare la posizione del massimo da inizializzare con il primo elemento ed aggiornare durante lo scorrimento se trovi un valore più alto. Ovviamente l'algoritmo trova l'ultimo elemento dell'array dal valore più alto in caso ce ne sia più di uno.
    Innanzitutto, grazie a tutti per le risposte..

    Forse ho dimenticato una premessa: studio ingegneria civile e ho anche il corso di informatica (veramente basico.. quasi inutile, ma vabbé.. )

    Non so.. mi sembrava un metodo più semplice e veloce ordinare l'array e prendere il suo ultimo elemento invece di fare un ciclo for e uno if (anzi, in effetti in un altro esercizio avevo fatto come dicevi tu con ciclo for e if e l'assistente mi ha consigliato di ordinare l'array e fare così...)

    Veniamo al dunque, scopo del mio esercizio è creare il metodo max() che restituisce il valore più alto dell'array.. quindi devo per forza farlo così. Ora, la mia domanda è: come generare un array casuale che però resta sempr euguale in qualsiasi metodo? (Non come adesso, che il metodo main e il metodo max hanno due array casuali con valori diversi)

    Grazie!

  9. #9

    Re: Re: Re: lavorare con array casuali

    Originariamente inviato da david23

    Non so.. mi sembrava un metodo più semplice e veloce ordinare l'array e prendere il suo ultimo elemento invece di fare un ciclo for e uno if (anzi, in effetti in un altro esercizio avevo fatto come dicevi tu con ciclo for e if e l'assistente mi ha consigliato di ordinare l'array e fare così...)
    Mah...il tuo assistente da dei suggerimenti quantomeno opinabili, per due motivi:
    1) Ordinare l'array è più oneroso , la sua complessità cresce come n (dove n è la dimensione dell'array) solo con alcuni algoritmi e nel caso migliore, in tutti gli altri casi si hanno andamenti che vanno da n * log(n) a n^2 , mentre la ricerca del massimo con l'algoritmo che ti abbiamo indicato ha sempre complessità o(n) .
    2) Ordinare l'array per ricercare il massimo non lascia l'array invariato, cosa che in generale è un prerequisito, se non lo è nel tuo caso specifico lo è in generale, non si è mai visto un algoritmo di ricerca del massimo implementato in una libreria che muta l'ordine degli elementi dell'array passato come input .

    Originariamente inviato da david23
    Ora, la mia domanda è: come generare un array casuale che però resta sempr euguale in qualsiasi metodo? (Non come adesso, che il metodo main e il metodo max hanno due array casuali con valori diversi)
    Definisci l'array come variabile di classe e popolalo nel costruttore, il massimo lo fai ricercare a un metodo di classe e non ad un metodo statico.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.