Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    42

    Errore nell'uso della classe ArrayList

    Salve!Sto avendo difficoltà nell'uso della classe ArryList.
    Si tratta di un semplice metodo che col ciclo for generalizzato,cerca all'interno del vettore un determinato campo che tutti gli elementi del vettore hanno.
    codice:
    public String cercaNome(String Nome){
    	for (Persona nome : contatti){
    		if (Nome.equals((String)nome.getNome())){
    			System.out.println("elemento presente");
    		}
    	}
    	return null;
    }
    Chiaramente persona è una classe,nome è una sua istanza,e rappresenta uno dei campi appartenenti alla classe persona.Contatti invece è un vettore che ho creato nella classe Rubrica.
    Contatti è una raccolta di tanti oggetti di tipo Persona.
    IL problema è che qui non ci sono errori di sintassi,ma di semantica.HO persino utilizzato il cast,ma niente da fare.Quando lancio il programma la scritta "elemento presente" non vuol proprio comparire.
    Se però scrivo tipo: if (Nome.equals("ciccio")) e nel programma inserisco "ciccio",la scritta compare!Perchè?
    Dove ho sbagliato?Vi prego ditemelo che sono 2 giorni che ci sbatto su la testa!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Errore nell'uso della classe ArrayList

    Originariamente inviato da onepiece007
    IL problema è che qui non ci sono errori di sintassi,ma di semantica.HO persino utilizzato il cast,ma niente da fare.Quando lancio il programma la scritta "elemento presente" non vuol proprio comparire.
    Il codice del metodo non fa una piega. Ma senza vedere il resto è difficile dire cosa non va.

    Dal codice nel metodo, deduco che 'contatti' è di tipo ArrayList<Persona> .. insomma, hai sicuramente usato i generics, perché se non li avessi usati il ciclo foreach non compilerebbe nemmeno. Se avessi usato il raw-type ArrayList e basta, esso fornirebbe degli Object e non andrebbe bene con la dichiarazione della variabile di tipo Persona nel for.

    Se getNome() di Persona ritorna un String (come sarebbe logico, dopotutto) il cast a String tra l'altro è pure superfluo.

    Posta qualche altro pezzo di codice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    42
    Ho aggiornato il codice che ora sembra migliorato,nonostante tutto il problema "misteriosamente rimane"
    Persona.java
    codice:
    //Classe che crea un oggetto persona nome e numero
    public class Persona {
    	//COSTRUTTORI
    public Persona(String Nome,String Telefono){
    	nome = "Nome";
    	telefono ="Telefono";
    	
    }
    //METODI che ritornano valori
    public String getTelefono(){
    	return telefono;
    }
    public String getNome(){
    	return nome;
    }
    public String getInfo(){
    	return telefono + nome;
    }
    
    //CAMPI DI ESEMPLARE
    private String nome;
    private String telefono;
    }
    E il codice di Rubrica.java aggiornato:
    codice:
    import java.util.*;
    public class Rubrica {
    //CAMPI DI ESEMPLARE
    	private ArrayList<Persona> contatti;
    	
    	//COSTRUTTORE
    	public Rubrica(){
    		
    		contatti = new ArrayList<Persona>();
    	}
    //METODI
    	
    	//Metodo che aggiunge un elemento
    	public void add(String nome,String telefono){
    		Persona contatto = new Persona(nome,telefono);
    		contatti.add(contatto);	
    	}
    	
    	
    	//Metodo che cerca un nominativo all'interno della raccolta e mostra le sue info
    public String [] cercaNome(String Nome){
    	for (Persona contatto : contatti){
    		if (Nome.equals(contatto.getNome())){
    			System.out.println("elemento presente");
    		}
    	}
    	return null;
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    42
    Porca miseri proprio in questo momento ho capito l'errore!
    È assurdo!
    Posto il codice erroneo:
    codice:
    public Persona(String Nome,String Telefono){
    	nome = "Nome";
    	telefono ="Telefono";
    Ho messo Nome e Telefono tra virgolette!
    Non capisco come mi è venuto di fare una bestialità simile...non me ne sono neppure accorto!Saranno le feste!
    Cmq grazie per l'aiuto!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da onepiece007
    Ho messo Nome e Telefono tra virgolette!
    appunto .....

    Tra l'altro in casi come questi (tipicamente costruttori e metodi setter) un "idioma" molto comune è quello di mettere i parametri con lo stesso identico nome dei campi della classe e di usare 'this' per referenziare il campo, che altrimenti verrebbe "nascosto" (shadowing) dal parametro.

    codice:
    public Persona(String nome, String telefono) {
        this.nome = nome;
        this.telefono = telefono;
    }
    Che ha anche un vantaggio: non doversi "inventare" un altro nome per i parametri. Vedi il tuo Nome che non segue le convenzioni di denominazione indicate dalla Sun.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    42
    Si mi conviene modificare i parametri come hai detto tu!
    Grazie per l'aiuto andbin!


    EDIT:ho modificato cosi la classe,praticamente ho messo THIS dappertutto ora non so se è una scelta saggia.
    codice:
    //Classe che crea un oggetto persona nome e numero
    public class Persona {
    	//COSTRUTTORI
    public Persona(String nome,String telefono,String fax){
    	this.nome = nome;
    	this.telefono =telefono;
    	this.fax = fax; //opzionale
    }
    //METODI che ritornano valori
    public String getTelefono(){
    	return this.telefono;
    }
    public String getNome(){
    	return this.nome;
    }
    public String getInfo(){
    	return "Nome:"+ this.nome + "  Telefono:" + this.telefono +"  Fax:" + this.fax;
    }
    
    //CAMPI DI ESEMPLARE
    private String nome;
    private String telefono;
    private String fax;
    }

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da onepiece007
    praticamente ho messo THIS dappertutto ora non so se è una scelta saggia.
    Se non c'è il problema dello shadowing, non è ovviamente necessario l'uso di this. È più una questione di leggibilità. La tua classe è semplice e breve ed è molto chiaro quali sono i campi e quali i parametri. Se una classe è molto complessa/lunga, mettere il this può rendere più chiaro il fatto che si sta facendo riferimento ad una variabile di istanza.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.