stampare 3 elementi maggiori di un vettore in input

feys88

Nuovo Utente
21 Set 2009
3
0
0
ho questo problema:
se l'array è composto da : 2,10,8,7,1,12,2
allora deve stampare: 12,10,8

ecco il codice Java:
Codice:
import java.util.*;

public class Max_tre {

	public static void main(String [] args){

		Scanner in=new Scanner (System.in);
		int A[]=new int [100];
		boolean flag=true;
		int i=0;
			while (flag){
				int n=in.nextInt();
				
				if (n<0){
				   flag=false;
				    break;
				}
				A[i++]=n;
			}
		// copio in un altro vettore per non modificare l'originale
	            int V[]=A.clone(); 
			find_max(A,V,A.length);
			
	}
	
	
	public static void find_max(int A[],int V[],int n){
		
		int find;
		int flag=1;
		for (int i=0;i<n-1;i++){
			 
			if (flag<=3){
			     find=Max_num(V,n,i);
			     System.out.println(find);
			     cancella(V,n,i);
				flag++;
			}	
		}
		
	
	}
	public static void cancella (int V[],int n,int i){
	

		for (int j=0;j<n;j++){
			if (i==j) {
				Valore v1 = new Valore(V[i]);
       				 Valore v2 = new Valore(V[j+1]);
				 delete(v1,v2);
			}
			
			
		}
	}
	public static void delete(Valore a,Valore b){
		
		
		int t = a.val;
        	a.val = b.val;
       	        b.val = 0;
		
	}

	
	public static int Max_num(int V[],int n,int i){

		int max=V[i];
		for (int j=0;j<n;j++){
			if (V[j]>max)
			max=V[j];
		}
		return max;
	}

	
}

class Valore {
	public int val;

    public Valore(int val) { this.val = val; }
}
ho pensato di usare un vettore di appoggio per non modificare il vettore originale.
Nel metodo find_max ad ogni iterazione controllo se flag non è arrivato a 3 e passo l'indice corrente al metodo max_num che calcola il massimo, sempre nell'if una volta trovato il massimo cancello l'elemento trovato (cioè il massimo) del vettore di appoggio. MA QUESTO NON ACCADE PERCHÈ???

grazie..
 

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
Ciao feys88 e benvenuto nel forum. Dunque nel codice che hai postato non ho capito un granchè comunque la soluzione forse e più semplice di quando pensi. Allora puoi utilizzare un algoritmo di ordinamento che ordina l'array (decrescente) ed estrai i primi tre elementi o gli ultimi tre in base al criterio (crescente o decrescente). In java esiste la classe Arrays che implementa già l'algoritmo di ordinamento, puoi fare in questo modo:
Codice:
int [] array = {5,7,9,10,80,30};
Arrays.sort(array);
int [] valueMax = new int[3];
System.arraycopy(array, array.length-3,valueMax,0,3);
Oppure se vuoi implementare tu un metodo fatto da te ti consiglio di utilizzare il selction sort (decrescente) che alla terzo massimo si ferma:
Codice:
public static int[] selectionSort(int[] array,int n) {
        int [] max = new int[n];
        for (int i = 0; i < n; i++) {
            int massimo = i;
            for (int j = i + 1; j < array.length; j++) {
                if (array[massimo] < array[j]) {
                    massimo = j;
                }
            }
            if (massimo != i) {
                int k = array[massimo];
                array[massimo] = array[i];
                array[i] = k;
                max[i] = k;
            } else max[i] = array[i];
        }
        return max;
    }
Il parametro n, in questo caso e 3, il numero di massimi che vuoi.
Quindi basta che lanci il metodo in questo modo:
Codice:
int [] n = {2,10,8,7,1,12,2};
int [] result = selectionSort(n, 3);
for(int i = 0; i < result.length; i++)
   System.out.println(result[i]);
 

feys88

Nuovo Utente
21 Set 2009
3
0
0
ti ringrazio, finalmente ho capito.
Volevo chiederti se non è troppo, in Java so che i parametri dei metodi vengono passati solo per valore, io che ho sempre programmato in C non riesco capire come il Metodo swap viene implementato in java.

In c faccio cosi:
Codice:
void swap (int *x,int *y){
     int temp=*x;
     *x=*y;
      *y=temp;
}
cioè viene referenziato (passato l'indirizzo)

in java ho provato a fare cosi:
Codice:
void swap (nome_classe [B]x[/B],nome_classe[B] y[/B]){
int temp=nome_classe x;
nome_classe x=nome_classe y;
nome_classe y=temp;
}
ma non funziona ho provato anche usando la versione precedente del codice in C (senza puntatori) ma non funziona,ovvio perchè viene passato per valore.


ancora grazie...
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
In Java i tipi primitivi vengono passati per valore mentre i tipi complessi sempre per riferimento.
Per fare quello che chiedi devi utilizzare la classe Integer al posto del tipo primitivo int.
 

stefano_c

Nuovo Utente
16 Nov 2009
4
0
0
Se non vuoi sbatterti tanto inserisci l'array in un TreeSet<Integer> ed estrai i primi 3 elementi xD
 
Discussioni simili
Autore Titolo Forum Risposte Data
I stampare una stringa echo PHP 2
F Stampare valori di un database PHP 14
A Stampare dati da form PHP 15
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
G leggere file txt e stampare con php il contenuto a video PHP 7
F stampare a video i risultati della query PHP 1
elpirata Ricavare e stampare indirizzo ip da array associativo PHP 0
B Stampare una porzione della pagina PHP 0
V Come stampare su Excel tabella con rowspan e colspan Javascript 2
elpirata Stampare carattere simbolo euro PHP 10
W Stampare file PDF in varie modalità. Windows e Software 5
L pdo (stampare un valore con ritorno a funzione) PHP 0
P [PHP] Aggiungere giorni e stampare risultato da data inserita in input PHP 3
P [PHP] Stampare record di diverse tabelle ma con nomi uguali PHP 6
K [PHP] Stampare tabella da database differenti. PHP 4
M Stampare con php e mysql PHP 8
L [PHP] stampare un'array di un database PHP 0
J modifica spooler di stampa per stampare in ordine di nome i files pdf Windows e Software 2
T PHP+MYSQL: stampare record con numero progressivo PHP 3
cristoforo58 Stampare dei valori XML in PHP PHP 0
elpirata [PHP] Stampare i valori di una variabile scritta su più righe PHP 1
K [PHP] Cancellare e Stampare tabella PHP 3
M [PHP] come stampare un Qr-code in FPDF PHP 8
M [Javascript] "Stampare" nel codice Var JS Javascript 5
N [PHP] stampare pagina html PHP 0
fulviozecchin [Java] Stampare intervallo tra due interi senza cicli Java 2
F [PHP] Stampare dati inviati tramite ajax PHP 0
elpirata [RISOLTO]Stampare giorno della settimana in tabella php PHP 6
elpirata [PHP] [RISOLTO] Stampare classe css in base al risultato della query PHP 6
Fuego2806 Stampare dati Form su immagine di sfondo con html HTML e CSS 1
Fuego2806 [PHP] Stampare dati Form su immagine di sfondo con html PHP 70
webmachine [PHP] Problema: Stampare tutte le occorrenza di una SELECT PHP 2
momeraths come stampare immagini contenute in un database PHP 7
I stampare in video i dati inseriti nel db PHP 1
M Sito "e-commerce", stampare dati di registrazione e dati dell'acquisto da pagine diverse PHP 7
L Stampare immagine php PHP 2
elpirata Stampare a video in echo table il risultato di una query PHP 4
Shyson Stampare lista in ordine decrescente Database 1
A Stampare senza sidebar Javascript 0
F stampare array php PHP 2
N Non stampare valori duplicati PHP 1
T Stampare maschera fronte/retro MS Access 0
C Stampare font personalizzati HTML e CSS 2
S estrarre e stampare a video un record in un div PHP 7
N FPDF stampare pdf automaticamente su stampante impostata PHP 0
M Stampare valore di un array PHP 1
P Stampare a video PHP 1
P Stampare '<?' in php PHP 7
D Stampare una query in una tabella MySQL 2
P Stampare valore font-size da css con javascript Javascript 2

Discussioni simili