Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Stampa array dopo ordinamento

    cia ragazzi ho un problema con gli array,devo ordinarli!nessun problema sull'algoritmo di ordinamento ma volevo chiedere una cosa.nel main,dopo aver inizializzato un array di interi a caso che non sia ordinato ovviamente, l'ho ordinato con blubblesort.questo metodo prende un array di interi e lo ordina e fin qui nessun problema.quando chiamo bubblesort(A) mi va ad ordinare il mio array A,no?ho poi provato a stampare A sperando fosse ordinato ma non lo è,qualcuno può spiegarmi il perchè?ecco parte del codice..
    bubble sort

    codice:
    static void bubblesort(Student[] A) {
       // TODO Auto-generated method stub
       for (int i = 0; i < A.length; i++) {
          boolean scambiAvvenuti = false;
          for (int j = 1; j < A.length -1;j++) {
             if(A[j].compareTo(A[j-1]) < 0) {
                Student temp = A[j-1];
                A[j-1] = A[j];
                A[j] = temp;
             }
          }
          if (!scambiAvvenuti) break;
       }
    }
    e poi il main..

    codice:
    System.out.println(s[tempI]);
    Student s_10[] = new Student[10];
    for (int i = 0; i < s_10.length; i++) {
       s_10[i] = new Student();
    }
    bubblesort(s_10);
    for(int i=0;i<s_10.length;i++) {
       System.out.println(s_10[i]);
    }
    il costruttore di studente va bene,ho gia provato.sicuramente sarà un errore concettuale

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    La classe Student implementa Comparable? Come l'hai implementata? E' tutto lì il succo dell'ordinamento.

    Poi, dal main io vedo che crei 10 istanze di Student... se non so come si comporta il costruttore, come faccio a sapere che quelle 10 istanze sono tutte diverse, visto che non hai nulla di diverso nella costruzione di ciascuna di esse?

    PS: quando il codice da postare è più di una riga, non usare il pulsante CODE del forum... scrivi direttamente a mano il tag [CODE], poi incolla il codice, poi chiudi a mano il tag con [/CODE], altrimenti il codice viene scritto tutto su una riga e diventa praticamente illeggibile.

    Sistemo io il tuo post.


    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
    codice:
    import java.util.Random;
    
    
    public class Student implements Comparable {
    	private static int matricolaCount=0;
    	private int matricola;
    	private float mediaVoti;
    	private int nroEsamiSostenuti;
    	private int nroLodi;
    
    	Student(float mediaVoti, int nroEsamiSostenuti, int nroLodi){
    		this.matricola=matricolaCount++;
    		this.mediaVoti=mediaVoti;
    		this.nroEsamiSostenuti=nroEsamiSostenuti;
    		this.nroLodi=nroLodi;
    	}
    	
    	/* 
    	 * Genera un Studente casuale
    	 */
    	Student(){
    		this.matricola=matricolaCount++;
    		this.mediaVoti=(float)(new Random().nextDouble()*30.0);
    		this.nroEsamiSostenuti=new Random().nextInt(20)+1;
    		this.nroLodi=new Random().nextInt(this.nroEsamiSostenuti)+1;
    		
    	}
    	public String toString(){
    		return "MATRICOLA: " + matricola + " MEDIA VOTI: "+mediaVoti + " NUMERO ESAMI SOSTENUTI: " + nroEsamiSostenuti + " NUMERO LODI: " + nroLodi;
    	}
    	
    	float getMediaVoti(){
    		return mediaVoti;
    	}
    	int getNroEsamiSostenuti(){
    		return nroEsamiSostenuti;
    	}
    	int getNroLodi(){
    		return nroLodi;
    	}
    	
    
    	public int compareTo(Object o) {
    		// Confronta usando come relazione d'ordine
    		// o1 < o2 iff o1.mediaVoti <= o2.mediaVoti
    		if(((Student)o).getNroLodi()<this.getNroLodi())
    			return +1;
    		else 
    			if(((Student)o).getNroLodi()>this.getNroLodi())
    				return -1;
    		return 0;
    	}
    	
    static void bubblesort(Student[] A) {
    		// TODO Auto-generated method stub
    		for (int i = 0; i < A.length; i++) {
    	    	boolean scambiAvvenuti = false;
    	    	for (int j = 1; j < A.length -1;j++) {
    	    		if(A[j].compareTo(A[j-1]) < 0) {
    	    			Student temp = A[j-1];
    	    			A[j-1] = A[j];
    	    			A[j] = temp;
    	    		}
    	    	}
    	    	if (!scambiAvvenuti) break;
    	    }
    		
    	}
    	
    	public static void main(String args[]){
    		Student s[]=new Student[4];
    		s[0]=new Student((float)28.5,10,3);
    		s[1]=new Student((float)24.5,12,5);
    		s[2]=new Student((float)26.5,15,1);
    		s[3]=new Student((float)22.5,14,4);
    		
    		int tempI=0;
    		for(int i=1;i<s.length;i++)
    		{
    			if(s[i].compareTo(s[tempI])>0)
    				tempI=i;
    			
    			
    		}
    		
    		System.out.println(s[tempI]);
    		
    		Student s_10[] = new Student[10];
    		for (int i = 0; i < s_10.length; i++) {
    			s_10[i] = new Student();
    		}
    		
    		bubblesort(s_10);
    		for(int i=0;i<s_10.length;i++)
    		{
    			System.out.println(s_10[i]);
    			
    			
    		}
    		
    		
    	
    	}

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Una cosa che non avevo visto prima:
    codice:
    static void bubblesort(Student[] A) {
       // TODO Auto-generated method stub
       for (int i = 0; i < A.length; i++) {
          boolean scambiAvvenuti = false;
          for (int j = 1; j < A.length -1;j++) {
             if(A[j].compareTo(A[j-1]) < 0) {
                Student temp = A[j-1];
                A[j-1] = A[j];
                A[j] = temp;
             }
          }
          if (!scambiAvvenuti) break;
       }
    }
    La variabile "scambiAvvenuti" non la modifichi mai, nemmeno quando effettivamente fai uno scambio... poi non sono particolarmente d'accordo con le condizioni e le inizializzazioni di questi due cicli for.

    Quello più esterno cicla su tutto l'array (mentre dovrebbe andare fino ad A.length - 1), quello interno parte sempre da 1 e va sempre fino ad A.length-1 (quindi l'ultimo valore dell'array non viene mai preso in considerazione), mentre dovrebbe essere cablato sul valore di "i" dato dal ciclo esterno.

    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

  5. #5
    grazie,risolto tutto!va benissimo adesso!

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