Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    20

    [java]ordinare un par int da un array di oggetti

    codice:
    public class test1 {
    int num1;
    int num2;
    int num3;
    String text;
    test1(int num1, int num2, int num3,String text){
    	this.num1=num1;
    	this.num2=num2;
    	this.num3=num3;
    	this.text=text;	
    }
    }
    
    
    
    
    class testesame{
    	public static void main(String args[]){
    		test1 buono [] = new test1 [3];
    		buono [0] = new test1 (1, 2, 3, "1 2 3");
    		buono [1] = new test1 (4, 5, 6, "4 5 6");
    		buono [2] = new test1 (7, 8, 9, "7 8 9");
    		
    		
    		for(int i = 0; i < buono.length; i++){
    			System.out.println(buono[i].num1);
    		}
    	}
    }
    mi chiedevo come potessi ordinare buono[].num1 tramite questo selection sort
    codice:
    public class Selectionsort{
    static void SS(int[] x) {
        for (int i=0; i<x.length-1; i++) {
            int minIndex = i;   
            for (int j=i+1; j<x.length; j++) {
                if (x[minIndex] > x[j]) {
                    minIndex = j;
                }
            }
            if (minIndex != i) { 
                int temp = x[i];
                x[i] = x[minIndex];
                x[minIndex] = temp;
            }
        }
    }
    }
    ho provato ad assegnare buono[].num1 a un vettore int a[] l'unico problema che poi stampando a video esce una cosa di questo genere:
    [I@5b3ac14d
    [I@5b3ac14d
    [I@5b3ac14d

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    E' ovvio, il tipo di dato utilizzato non è int, ma è test1... dovresti anche rispettare le convenzioni di Java (iniziale del nome della classe in maiuscolo).

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    20
    si, sono semplici test e esercizi quindi mi chiedevo come faccio ad ordinare quel valore dall'array di oggetti che ho creato. cioè ordinare l'itero array semplicemente da un parametro.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    3
    Ho modificato le classi da te create in modo da seguire le convenzioni di Java. Inoltre ho diviso per comodità le classi TestEsame e Test1, in modo di avere il costruttore di Test1 (con i suoi metodi) in file separati.



    codice:
    public class Test1 {
    	int num1;
    	int num2;
    	int num3;
    	String text;
    	
    	public Test1(int num1, int num2, int num3,String text){
    		this.num1=num1;
    		this.num2=num2;
    		this.num3=num3;
    		this.text=text;	
    	}
    }
    codice:
    class TestEsame{
    	public static void main(String args[]){
    		Test1 buono[] = new Test1[3];
    		buono[0] = new Test1(1, 2, 3, "1 2 3");
    		buono[1] = new Test1(4, 5, 6, "4 5 6");
    		buono[2] = new Test1(7, 8, 9, "7 8 9");
    		
    		
    		for(Test1 i : buono){
    			System.out.println(i.num1);
    		}
    	}
    }
    Come puoi vedere il ciclo for alla fine l'ho sostituito con un più adatto ciclo for each. Comunque ti consiglio di cambiare i nomi alle variabili num, va bene anche un qualcosa di più neutro come x, y, z. Il codice ne guadagnerebbe in leggibilità.
    Purtroppo con i vettori non ho molta esperienza, quindi non ti posso aiutare.

    Edit: sono talmente cotto per lo studio, che non mi sono accorto che con vettore itendevi un semplice array e non un oggetto della classe Vector (ho studiato 7 ore con una pausa di 10 minuti per il pranzo).
    Provo a controllare un po' il selection sort e edito il messaggio.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    20
    le classi e i nomi delle variabili li ho creati al momento solo per esporre il problema sul forum, quindi non farci caso più di tanto.

  6. #6

    Re: [java]ordinare un par int da un array di oggetti

    Originariamente inviato da Ironwill
    mi chiedevo come potessi ordinare buono[].num1 tramite questo selection sort
    codice:
    public class Selectionsort{
    static void SS(int[] x) {
        for (int i=0; i<x.length-1; i++) {
            int minIndex = i;   
            for (int j=i+1; j<x.length; j++) {
                if (x[minIndex] > x[j]) {
                    minIndex = j;
                }
            }
            if (minIndex != i) { 
                int temp = x[i];
                x[i] = x[minIndex];
                x[minIndex] = temp;
            }
        }
    }
    }
    Se x contiene degli oggetti complessi (come Test) allora devi modificare il codice del tuo algoritmo, in quanto nel tuo caso x[j] di sicuro non restituisce un valore numerico, ma un riferimento.

    Se l'ordinamento di tali oggetti si basa su un'unica chiave (ad esempio num1), allora puoi cambiare il codice specificando le chiamate al campo in questione, ad esempio:
    codice:
    x[minIndex].num1
    x[j].num1
    Altrimenti, se l'ordinamento si basa su più chiavi, allora ti conviene pensare a soluzioni ottimali, come:
    - java.lang.Comparable
    - java.util.Comparator


    Originariamente inviato da Ironwill
    ho provato ad assegnare buono[].num1 a un vettore int a[] l'unico problema che poi stampando a video esce una cosa di questo genere:
    [I@5b3ac14d
    [I@5b3ac14d
    [I@5b3ac14d
    Nota che gli array non hanno il metodo toString, quindi non puoi adottare una soluzione tipo
    codice:
    print( new int[]{1, 2, 3} );
    bensì devi adottare un ciclo per poter stampare gli elementi di un array.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    3

    Re: Re: [java]ordinare un par int da un array di oggetti

    Altrimenti, se l'ordinamento si basa su più chiavi, allora ti conviene pensare a soluzioni ottimali, come:
    - java.lang.Comparable
    - java.util.Comparator
    Cavolo, non avevo proprio pensato all'uso di Comparable/Comparator, anche perchè, una volta implementato come si deve il metodo di comparazione si può usare Arrays.sort che fa tutto da solo.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    20

    Re: Re: [java]ordinare un par int da un array di oggetti

    Originariamente inviato da VincenzoTheBest
    Se x contiene degli oggetti complessi (come Test) allora devi modificare il codice del tuo algoritmo, in quanto nel tuo caso x[j] di sicuro non restituisce un valore numerico, ma un riferimento.

    Se l'ordinamento di tali oggetti si basa su un'unica chiave (ad esempio num1), allora puoi cambiare il codice specificando le chiamate al campo in questione, ad esempio:
    codice:
    x[minIndex].num1
    x[j].num1
    Altrimenti, se l'ordinamento si basa su più chiavi, allora ti conviene pensare a soluzioni ottimali, come:
    - java.lang.Comparable
    - java.util.Comparator
    non ho capito bene questa parte.

    Nota che gli array non hanno il metodo toString, quindi non puoi adottare una soluzione tipo
    codice:
    print( new int[]{1, 2, 3} );
    bensì devi adottare un ciclo per poter stampare gli elementi di un array.
    codice:
    	int a []= new int [buono.length];
    			for(int i = 0; i <a.length; i++){
    				a[i]= buono[i].num1;
    			}
    				
    			
    		Selectionsort.SS(a);
    		
    		for(int i = 0; i < buono.length; i++){
    			System.out.println(a[i]);
    		}
    il risultato è questo :

    [I@5b3ac14d
    [I@5b3ac14d
    [I@5b3ac14d

    ho assegnato a=buono[].num1 giusto per raggirare il problema, tuttavia non l'ho risolto perchè non ho ancora capito come ordinare queto array di oggetti tramite un parametro.

  9. #9

    Re: Re: Re: [java]ordinare un par int da un array di oggetti

    Originariamente inviato da Ironwill
    non ho capito bene questa parte.
    Cosa non hai capito esattamente?

    Originariamente inviato da Ironwill
    codice:
    	int a []= new int [buono.length];
    			for(int i = 0; i <a.length; i++){
    				a[i]= buono[i].num1;
    			}
    				
    			
    		Selectionsort.SS(a);
    		
    		for(int i = 0; i < buono.length; i++){
    			System.out.println(a[i]);
    		}
    il risultato è questo :

    [I@5b3ac14d
    [I@5b3ac14d
    [I@5b3ac14d
    Sicuro che quel codice ti fornisce quell'output?

    Si ottiene quell'output se a[i] è un oggetto, e devi fare l'override (ridefinizione) del metodo toString, altrimenti tale metodo, così come viene ereditato da Object, stampa l'indirizzo in memoria.

    Ma ho notato che all'array passi degli interi.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    3

    Re: Re: Re: [java]ordinare un par int da un array di oggetti

    Originariamente inviato da Ironwill
    non ho capito bene questa parte.
    Se intendi il discorso sull'uso di Comparable/Comparator:
    ti sta suggerendo di implementare una tra queste due interfacce nella classe Test1 in un modo simile a questo:


    codice:
    public class Test1 implements Comparable {
    	costruttore Test1
    	...
    
    	public int compareTo(Test1 t) {
    	...
    	}
    Con Comparator il concetto è lo stesso ma il metodo da implementare è compare(Test1 t, Test 1 u)

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.