Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    4

    piccolo problema con un array di oggetti

    salve ragazzi vi seguo da molto tempo, e voglio ringraziare tutto il forum per le ottime guide.

    vi espongo il mio problema:

    allora io provengo dal c++ quindi di java ne so poco (per ora) cmq ho un problema nella visualizzazione di un array di oggetti:

    ho due classi: Main e Clienti cosi fatte:
    codice:
    public class Clienti {
    
             //dichiarazioni
    	 static Scanner in = new Scanner(System.in);
    	 static String nome;
    	 static String cognome;
    	
    	
    	
    	//costruttore
    	public Clienti() {
    		
    		nome="ND";
    		cognome="ND";
    	
    	}
    	public Clienti(String nome,String cognome)
    	{
    		nome = nome;
    		cognome = cognome;
    		
    	}
    	
    	
    	//get e set
    	public static String getCognome() {
    		return cognome;
    	}
    	public static void setCognome(String cognome) {
    		Clienti.cognome = cognome;
    	}
    	public static String getNome() {
    		return nome;
    	}
    	public static void setNome(String nome) {
    		Clienti.nome = nome;
    	}
    
    	
    	
    	
    	//metodi
    	public static void registraCliente(Clienti arrayDiClienti[],int nc)
    	{
    		for (int i=0;i<nc;i++)
    		{
    		System.out.println("Inserisci il Nome: ");
    		System.out.println(" ");
    		nome=in.next();
    		System.out.println("Inserisci il Cognome: ");
    		System.out.println(" ");
    		cognome=in.next();
    		arrayDiClienti[i]=new Clienti(nome,cognome);
    		
    		}
    		
    	}
    	
    	
    	public static void visualizzaArrayClienti(Clienti arrayDiClienti[])
    	{
    		
    		
    		for (int i=0;i<arrayDiClienti.length;i++)
    		{
    			System.out.println(arrayDiClienti[i].getNome());
    			System.out.println(arrayDiClienti[i].getCognome());
    			
    			
    		}
    	}

    codice:
    public class Main {
    
    	public static void main(String[] args) {
    		
    		Clienti arrayDiClienti[]=null;
    		int nc;
                    
    
    		//########## REGISTRA CLIENTE
    		System.out.println("Inserisci il numero di clienti da registrare: ");
    		System.out.println("");
    		nc=in.nextInt();
    				
    		
    		arrayDiClienti=new Clienti[nc];
    
    		Clienti.registraCliente(arrayDiClienti,nc);
    		Clienti.visualizzaArrayClienti(arrayDiClienti);
    		
                    }
    		
    }
    ok ora vi spiego cosa succede quando lo eseguo:

    prima di tutto mi chiede quanti clienti voglio registrare, per esempio facciamo due poi dopo aver creato correttamente i due oggetti e averli messi nell'array, chiamo il metodo per farli visualizzare ma qui viene il problema infatti il metodo visualizza soltanto l'ultimo cliente creato.

    faccio un esempio:

    primo cliente:
    mario
    rossi

    secondo cliente
    gianni
    bianchi

    l'output del metodo è:

    gianni
    bianchi
    gianni
    bianchi

    praticamente il metodo get e come se prendesse sempre l'ultimo nome o cognome inserito.

    confido nel vostro aiuto

    grazie mille in anticipo

    NgL

  2. #2
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    il problema non è il get ma la staticità del cliente. gli attributi nome e cognome non dovrebbero essere statici in quanto tu non devi condividerli tra più istanze dello stesso tipo ma devono essere diversi per ogni istanza

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  3. #3
    Ci sono molte cose che non quadrano:
    1) Confondi l'uso dei campi di esemplare con quelli statici;
    2) di conseguenza confondi i metodi di istanza con quelli di classe;
    3) in generale è sempre meglio staccare il livello di presentazione, in questo caso Scanner dalle classi Entità (Cliente);
    4) i metodi registraClienti e visualizzaClienti non hanno ragione di esistere, per come è stata strutturata la classe.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    4
    il problema non è il get ma la staticità del cliente. gli attributi nome e cognome non dovrebbero essere statici in quanto tu non devi condividerli tra più istanze dello stesso tipo ma devono essere diversi per ogni istanza
    si infatti devono essere diverse, ho provato a cambiarli in modo non statico pero non va cmq

    Ci sono molte cose che non quadrano:
    1) Confondi l'uso dei campi di esemplare con quelli statici;
    2) di conseguenza confondi i metodi di istanza con quelli di classe;
    3) in generale è sempre meglio staccare il livello di presentazione, in questo caso Scanner dalle classi Entità (Cliente);
    4) i metodi registraClienti e visualizzaClienti non hanno ragione di esistere, per come è stata strutturata la classe.
    1) mi scuso pero e la prima volta che uso java
    2) infatti pero come metodi ho solo scritto quelli
    3) Scanner mi serve perche i metodi devono "prendere" dei dati da tastiera cmq cosa intenti per "staccare"
    4) che significa che non hanno ragione di esistere? intendi che dovrei metterli drettamente nel main?

    grazie ancora per le risposte

    NgL

  5. #5
    Originariamente inviato da ngl
    3) Scanner mi serve perche i metodi devono "prendere" dei dati da tastiera cmq cosa intenti per "staccare"
    Nel tuo caso, potresti istanziarlo nel main della stessa oppure di un altra classe.
    Originariamente inviato da ngl
    4) che significa che non hanno ragione di esistere? intendi che dovrei metterli drettamente nel main?
    Si non ha senso definire questi metodi per come hai definito la classe. Potresti fare:
    codice:
    public static void main(String[] args){
            Scanner scan = new Scanner(System.in);
            System.out.println("Numero clienti da inserire: ");
            int size = scan.nextInt();
            Cliente clienti[] = new Cliente[size];
    
            //prendi i dati ed istanzi i vari clienti
    
            //stampi l'array...
    }
    Altrimenti con un vector/list statica (all'interno di Cliente) potresti tenere traccia delle varie istanze della classe Cliente. In questo caso l'array non va utilizzato come nell'esempio.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    4
    Originariamente inviato da VincenzoTheBest
    Nel tuo caso, potresti istanziarlo nel main della stessa oppure di un altra classe.

    Si non ha senso definire questi metodi per come hai definito la classe. Potresti fare:
    codice:
    public static void main(String[] args){
            Scanner scan = new Scanner(System.in);
            System.out.println("Numero clienti da inserire: ");
            int size = scan.nextInt();
            Cliente clienti[] = new Cliente[size];
    
            //prendi i dati ed istanzi i vari clienti
    
            //stampi l'array...
    }
    Altrimenti con un vector/list statica (all'interno di Cliente) potresti tenere traccia delle varie istanze della classe Cliente. In questo caso l'array non va utilizzato come nell'esempio.
    ok allora ho fatto cosi:

    Clienti:
    codice:
    public class Clienti {
    	
    	//dichiarazioni
    	  String nome,cognome;
    	  
    	
    	//costruttore
    	public Clienti() {
    		
    		nome="ND";
    		cognome="ND";
    	
    	}
    	public Clienti(String nome,String cognome)
    	{
    		nome = nome;
    		cognome = cognome;
    		
    	}
    	
    	
    	//get
    
    	public  String getCognome() {
    		return cognome;
    	}
    		
    	public  String getNome() {
    		return nome;
    	}
    	
    }
    Main:
    codice:
    public class Main {
    
    	public static void main(String[] args) {
    		
    		
    		
    		//dichiarazioni
    		Scanner in = new Scanner(System.in);
    		String nome,cognome;
    
    
    		
    	        System.out.println("Numero clienti da inserire: ");
    	        int size = in.nextInt();
    	        Clienti clienti[] = new Clienti[size];
    
    	        //prendi i dati ed istanzi i vari clienti
    	        
    	        for (int i=0;i<size;i++)
    			{
    			System.out.println("Inserisci il Nome: ");
    			System.out.println(" ");
    			nome=in.next();
    			System.out.println("Inserisci il Cognome: ");
    			System.out.println(" ");
    			cognome=in.next();
    			clienti[i]=new Clienti(nome,cognome);
    			
    			}
    	        //stampi l'array...
    		
    	        for (int i=0;i<clienti.length;i++)
    			{
    				System.out.println(clienti[i].getNome());
    				System.out.println(clienti[i].getCognome());
    							
    			}
    pero ora mi stampa null ad esempio se inserisco 2 clienti mi stampa null 4 volte

    potresti spigarmi il secondo metodo con un vector/list?

    grazie ancora

    NgL

  7. #7
    Originariamente inviato da ngl
    pero ora mi stampa null ad esempio se inserisco 2 clienti mi stampa null 4 volte
    Perchè hai scritto:
    Originariamente inviato da ngl
    codice:
    public class Clienti {
    ...
    	public Clienti(String nome,String cognome)
    	{
    		nome = nome;
    		cognome = cognome;
    		
    	}
    ...
    }
    Nel momento in cui c'è omonimia tra parametri/variabili locali e campi di istanza, devi qualificare usando la parola chiave this i campi di istanza, quindi devi scrivere:
    codice:
    public class Clienti {
    ...
    	public Clienti(String nome,String cognome)
    	{
    		this.nome = nome;
    		this.cognome = cognome;
    		
    	}
    ...
    }
    Originariamente inviato da ngl
    potresti spigarmi il secondo metodo con un vector/list?
    Ad esempio potresi avere una cosa del genere:
    codice:
    import java.util.LinkedList;
    public class Cliente {
            private String nome;
            private String cognome;
            private static LinkedList<Cliente> all;
    
            //le variabili statiche vanno inizializzate in questo blocco
            static{
                    all = new LinkedList<Cliente>();
            }
    
            //costruttori, metodi
    }

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    4
    Grazie mille Vincenzo penso di aver risolto

    NgL

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.