Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    Elementi di una LinkedList

    Ciao.
    Ho fatto un piccolo programmino che legge un file f1 contenente numeri interi e li mette in una linkedlist.
    questo programmino dovrebbe stampare su schermo tutti i numeri senza ripetizione ed in modo ordinato crescente.
    Quello che viene stampato però è questo :
    [1,2,3,3,4,5,6,5,5,7,8,8,8,8,9,0,8,7,7,8,8,]

    Come potete vedere ci sono le ripetizioni , ed i numeri non sono ordinati.
    Potete dare un occhiata al codice e dirmi dove ho sbagliato?
    Tanks


    codice:
    package Poo;
    import java.util.*;
    import java.io.*;
    
    public class Applicazione {
    	
    	public static void main(String[] args){
    		
    		Lista lista = new Lista();
    		try{
    			BufferedReader in = new BufferedReader(new FileReader("D:/Workspace/Files/f1.txt"));
    			String linea = in.readLine();
    			StringTokenizer st = new StringTokenizer(linea);
    			while(st.hasMoreTokens()){
    			int n = Integer.parseInt(st.nextToken());
    			lista.aggiungi(n);
    		}
    		}
    		catch(IOException e){
    			e.printStackTrace();
    		}
           System.out.println(lista.toString());
    	}
    }
    		
    		
    		
    
    class Lista implements Comparable<Integer>{
    	
    	private LinkedList<Integer> lista;
    	
    	public Lista(){
    		lista = new LinkedList<Integer>();
    	}
    	
    	public void aggiungi(int n){
    		lista.add(n);
    	}
    	public Iterator<Integer> iterator(){
    		return lista.iterator();
    	}
    	public int compareTo(int x){
    		if(lista.element()<x) return -1;
    		if(lista.element()>x) return 1;
    		return 0;
    	}
    	
    	public boolean equals(Object o){
    		if(o==this) return true;
    		if(o==null) return false;
    		if(!(o instanceof Lista)) return false;
    		int n = (Integer)o;
    		return lista.element()==(n);
    	}
    	public String toString(){
    		StringBuilder sb = new StringBuilder();
    		sb.append("[");
    		Iterator<Integer> it = this.iterator();
    		while(it.hasNext()){
    			int n = it.next();
    			if(this.equals(n)) continue;
    			sb.append(n);
    			sb.append(",");
    			}
    		sb.append("]");
    			return sb.toString();
    	}
    }

  2. #2
    I numeri non sono ordinati e si ripetono semplicemente perchè non li ordini e non elimini le ripetizioni.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Originariamente inviato da satifal
    I numeri non sono ordinati e si ripetono semplicemente perchè non li ordini e non elimini le ripetizioni.
    Già. Probabilmente hai frainteso: se ti aspetti che implementare l'interfaccia comparable sia sufficiente perché ci sia un ordinamento automatico hai capito male. Quella serve solo a spiegare all'algoritmo di ordinamento sulla base di COSA deve effettuare l'ordinamento degli elementi di una collection. Per quanto concerne l'eliminazione dei duplicati , anche quelli non vengono eliminati magicamente, devi controllare tu in fase di inserimento. Ciao.
    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.)

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Allora:

    Ho bisogno di sapere se i metodi compareTo ed equals che ho scritto sono corretti per questo programmino

    codice:
    public boolean equals(Object o){
    		if(o==this) return true;
    		if(o==null) return false;
    		if(!(o instanceof Lista)) return false;
    		int n = (Integer)o;
    		return lista.element().equals(n);
    	}
    codice:
    public int compareTo(Integer x){
    		if(lista.element()<x) return -1;
    	    if(lista.element()>x) return 1;
    	    return 0;
    		}

    Per quanto riguarda l'ordinamento , io nel main scrivo Collections.sort(lista) ma mi da errore.

    Potete farmi vedere il codice corretto per far funzionare questo benedetto programma?
    Grazie

  5. #5
    Originariamente inviato da Markus85
    ...
    Per quanto riguarda l'ordinamento , io nel main scrivo Collections.sort(lista) ma mi da errore.
    ...
    In tutti i tuoi post continui ad affermare che determinate porzioni di codice ti "danno errore". Forse non ti è ben chiara la grande utilità dello stacktrace. Non vorrei ricominciare il botta e risposta di questo thread per cui ci diresti cortesemente e con esattezza che errore ti da?
    Grazie.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Caro satifal.

    Il compilatore non mi da nessun errore.

    Il problema è che alla fine su schermo viene stampato :

    [1,2,3,3,4,5,6,5,5,7,8,8,8,8,9,0,8,7,7,8,8,]

    che è esattamente il file f1 che ho inserito nel main e che devo ordinare.

    Il programma corretto dovrebbe visualizzare su schermo cosi :

    [0,1,2,3,4,5,6,7,8,9]

    Cioè elementi in ordine e senza duplicati.

    Non posso dirti gli errori del programma se Eclipse non li segnala.
    Vuoi che tu faccia una foto della schermata di Eclipse ? Cosi ti rendi conto meglio?

    Può anche darsi che non abbia chiara l'utilità dello stacktrace ,
    Forse tu potresti non aver chiaro il concetto di errori di sintassi ed errori di semantica.
    Se devi fare il botta e risposta , come hai detto tu , quindi forse ti secca rispondere al post , meglio che non rispondi per niente.
    Non pretendo il tuo aiuto.
    Ciao

  7. #7
    Originariamente inviato da Markus85
    ...
    io nel main scrivo Collections.sort(lista) ma mi da errore.
    ...
    Sei tu che hai detto che ti da errore!

    Originariamente inviato da Markus85
    ...
    Il compilatore non mi da nessun errore.
    ...
    Se ora dici che non te ne da rendi difficoltoso aiutarti.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da Markus85
    Il compilatore non mi da nessun errore.
    Tu hai scritto "Per quanto riguarda l'ordinamento , io nel main scrivo Collections.sort(lista) ma mi da errore.", quindi sei tu a parlare di errori che ti vengono restituiti, quindi non si tratta di invenzioni o traveggole altrui, come invece stai sostenendo.

    Come è già stato ribadito molte volte in passato, quando si dice "mi da errore", si deve specificare l'errore.


    Originariamente inviato da Markus85
    Non posso dirti gli errori del programma se Eclipse non li segnala.
    Vuoi che tu faccia una foto della schermata di Eclipse ? Cosi ti rendi conto meglio?
    Come si stava già dicendo, sei tu che hai parlato di errori, nessuno se li è inventati, quindi è naturale che ti vengano richiesti, per cui è inspiegabile il motivo di questa tua acredine nei confronti di chi ti chiede dettagli per capire il tuo problema e, di conseguenza, spiegarti come risolverlo.

    Ti invito ad essere più preciso nell'esposizione dei tuoi problemi, evitando polemiche verso gli utenti se questi chiedono chiarimenti a seguito di indicazioni evidentemente contrastanti.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Come prima cosa l'interfaccia Comparable<T> permette di confrontare tra di loro oggetti di tipo T per cui guardando il tuo codice:

    codice:
    ...
    class Lista implements Comparable<Integer>{
    
            ...
    
    	public int compareTo(int x){
    		if(lista.element()<x) return -1;
    		if(lista.element()>x) return 1;
    		return 0;
    	}
    
            ...
    
    }
    dovresti implementare il metodo astratto ereditato compareTo(Integer) e NON compareTo(int
    ) come invece fai. Con un errore del genere il codice NON compila ritornando al discorso degli errori.
    Comincia a sistemare questo poi si vede il resto.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Sistemato

    codice:
    
    package Poo;
    import java.util.*;
    import java.io.*;
    
    public class Applicazione {
    	
    	public static void main(String[] args){
    		
    		Lista lista2 = new Lista();
    		try{
    			BufferedReader in = new BufferedReader(new FileReader("D:/Workspace/Files/f1.txt"));
    			String linea = in.readLine();
    			StringTokenizer st = new StringTokenizer(linea);
    			while(st.hasMoreTokens()){
    				String s = st.nextToken();
    			int n = Integer.parseInt(s);
    			lista2.aggiungi(n);
    		}
    		}
    		catch(IOException e){
    			e.printStackTrace();
    		}
    		
    	
    		
           System.out.println(lista2.toString());
    	}
    }
    		
    		
    		
    
    class Lista implements Comparable<Integer>{
    	
    	private LinkedList<Integer> lista;
    	
    	public Lista(){
    		lista = new LinkedList<Integer>();
    	}
    	
    	public void aggiungi(Integer n){
    		lista.add(n);
    	}
    	public Iterator<Integer> iterator(){
    		return lista.iterator();
    	}
    	public int compareTo(Integer x){
    		if(lista.element()<x) return -1;
    	    if(lista.element()>x) return 1;
    	    return 0;
    		}
    	
    	
    	public String toString(){
    		StringBuilder sb = new StringBuilder();
    		sb.append("[");
    		Iterator<Integer> it = this.iterator();
    		while(it.hasNext()){
    			Integer n = it.next();
    			if(this.equals(n)) continue;
    			sb.append(n);
    			sb.append(",");
    			}
    		sb.append("]");
    			return sb.toString();
    	}
    }
    ancora mi stampa

    [1,2,3,3,4,5,6,5,5,7,8,8,8,8,9,0,8,7,7,8,8,]

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.