Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86

    Eliminare duplicati dall'array

    Ciao a tutti ho un'array di tipo Dipendete in cui sono memorizzati vari dipendenti caratterizzati da nome,cognome,stipendio,mansione e data iscrizione. Sto provando ad eliminare i dipendenti che hanno il cognome uguale ma quando lancio il programma mi da Exception in thread "main" java.lang.NullPointerException.

    questo è il frammento di codice che dovrebbe eliminare i duplicati :

    codice:
    public void remove()
    	{
    		int i=1;
    		while ((dip[i-1].getCognome()!= dip[i].getCognome())&&(i<dip.length-1))
    		++i;
    		if(dip[i-1].getCognome()!= dip[i].getCognome())
    			i++;
    		int j=i-1;
    		while (i<dip.length-1){
    			++i;
    			if (dip[i-1].getCognome()!=dip[i].getCognome())
    			{
    				j++;
    				//array[j]=array[i];
    				//dip[i].getTipologia().compareToIgnoreCase(dip[i].getTipologia()) < 0
    				dip[j]= dip[i];
    			}
    		}

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    116
    Sarò sincero e ti dico che non ho compreso pienamente la logica del tuo codice, però in questo thread espongo un metodo per fare esattamente la cosa che cerchi di fare (ma in modo diverso da come la proponi tu)

    http://forum.html.it/forum/showthrea...readid=1428456

    dacci un occhio!

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86
    Per la rimozione dei duplicati nell'array usavo questo codice che mi funzionava però riadattandolo alle mie esigenze purtroppo non va !
    codice:
    public class RemoveDouble
    {
    	public RemoveDouble(int[] array)
    	{
    		this.array = array;
    	}
    			
    	public void remove(){
    	int i=1;
    	while ((array[i-1]!=array[i])&&(i<array.length-1))
    	++i;
    	if(array[i-1]!= array[i])
    		i++;
    	int j=i-1;
    	while (i<array.length-1){
    		++i;
    		if (array[i-1]!=array[i]){
    			j++;
    			array[j]=array[i];
    		}
    	}
    	System.out.print("L'array senza duplicati è: ");
    	int[] b = new int[j];
    	for (int k = 0; k<j; k++)
    	{b[k] = array[k];
    	System.out.print(b[k]+" ");}
    	}
    	private int[] array;
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    a parte che

    java.lang.NullPointerException

    indica qualcosa di non inzializzato che tenti di utilizzare come lo fosse.
    Controlla che hai inizializzato tutte le risorse che usi all'interno del metodo. In genere ti darà anche un numero di riga, che è quello in cui si verifica l'eccezione (in quella riga c'è qualcosa di null insomma)

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86
    allora l'errore di nullpointer l'ho trovato avevo inizializzato l'array in maniera errata ! però alla rimozione dei duplicati ancora non ci siamo ! Per indicare che una stringa è diversa da un'altra posso ancora utilizzare " != " o c'è qualche altro metodo del compareTo che me lo fa?

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    confronti stringhe o oggetti o tipi primitivi?

    per tipi primitivi va bene != oppure ==, per oggetti usa equals (e ricordati di farne l'override).

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86
    allora ragazzuoli ho provato ad utilizzare la rimozione dei duplicati che viene suggerita [/CODE]
    IN QUESTO THREAD e funziona bene. Adesso mi elimina i duplicati e me li stampa in forma tabellare... per completezza vi posto il codice della rimozione ! grazie della santa pazienza e del tempo che mi avete dedicato
    codice:
    	public void remove()
    	{
    		System.out.println("+--------------------------------------------------------------------+");
    		System.out.println("| nome    | cognome    | stipendio   | mansione   | anno-mese-giorno");
    		System.out.println("----------------------------------------------------------------------+");
    		
    		int logicalSize = dip.length;
    
    		
    		for (int i = 0; i < logicalSize; i++) 
    		{
                String elem = dip[i].getCognome();
    
                int s = logicalSize;
    
                for (int j = i+1, w = j; j < s; j++) 
                {
                    if (elem.equals(dip[j].getCognome())) 
                    {
                        logicalSize--;
                    } 
                    else 
                    {
                        dip[w++] = dip[j];
                    }
                }
                    
            
    
    		  }
    		for(int i = 0; i<logicalSize; i++)
    		{
    			System.out.printf("| %10s", dip[i].getNome() );
    			System.out.printf("| %10s", dip[i].getCognome() );
    			System.out.printf("| %10s", dip[i].getStipendio());
    			System.out.printf("| %10s", dip[i].getTipologia());
    			System.out.printf("| %10s-", dip[i].getAnno());
    			System.out.printf("%1s-",	 dip[i].getMese());
    			System.out.printf("%1s", dip[i].getGiorno()+"|\n");
    			
    			
    		}
    		
    
    	}

  8. #8
    Secondo me l'ereditarietà in questo caso va sfruttata!
    Fai implementare l'interfaccia Comparable alla tua classe Dipendente tale che nel metodo (implementato) compareTo() stabilisci in base a quali chiavi confrontare le istanze della medesima classe.

    http://download.oracle.com/javase/1....omparable.html

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.