IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Classe objet avec tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Par défaut Classe objet avec tableau
    Bonsoir, j'essaie pour la première fois les class, je voudrais juste saisir un tableau en rentrant au clavier le nom et le montant, je compile bien mais quand je veux saisir il me met un NullPointer, pour moi c'est normal que mon tableau soit Null, je suis en train de le saisir!
    Merci pour une petite explication

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import java.util.Scanner;
    class Client{
    	String nom;
    	double Montant;
    	}					
    public class Gestion{
    	public static void main(String[]args){
    		Scanner sc = new Scanner(System.in);
    		Client[]tabClient=new Client[5];
    		for (int i=0;i<tabClient.length;i++){
    			System.out.print("saisir nom  Client" +( i+1) + " : ");
    			tabClient[i].nom=sc.nextLine();
    			System.out.println("saisir Montan tde " +( i+1) + " : ");
    			tabClient[i].Montant=sc.nextDouble();
    		}
    		int som=0;
    		int somSup=0;
    		for (int i=0;i<tabClient.length;i++){
    			som+=tabClient[i].Montant;
    			if(tabClient[i].Montant>=100)
    				somSup++;
    		}
    		System.out.println("la somme globale vaut :" + som);
    		System.out.println("il y a " + somSup + "sup a 100 euros");
    	}
    }

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Client[]tabClient=new Client[5];
    initialise un tableau de taille 5, mais ne crée aucun client.

    A ce stade, chaque case du tableau contient "null". Il faut donc créer un client dans chaque case avant de pouvoir y accéder :

    il te manque donc cette initialisation pour chaque passage dans ta boucle, avant d'accéder aux propriétés des clients (nom, etc.) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabClient[i] = new Client();
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Par défaut
    Bonjour,
    Désolée, si j'ai pris la peine de poster c'est que ce n'était pas clair pour moi.
    Je suis autodidacte et je passe beaucoup de temps, la moitié de ma nuit à bosser,peut être que je devrais regarder TF1 ou M6 à la place, ça m'éviterai de poser des questions idiotes.
    A partir du moment ou l'on crée un tableau de type class, il me semblait que ça suffisait,initialiser chaque case me paraissait redondant et un peu long à faire, si j'ai 100 clients, je fais quoi?
    Bonne Journée

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Il n'est pas possible de définir ce comportement pour une raison très simple : beaucoup de classes n'ont pas de constructeur par défaut. Comment remplir alors le tableau ?

    De plus, bien souvent l'affectation se fera par des objets qu'on récupère ailleurs ; instancier automatiquement tous les éléments d'un tableau signifierait dans bien des cas des instanciations inutiles.

    Et pour répondre à ta question : si tu as 100 éléments, tu fais 100 instanciations. En général ça sera dans une boucle, il ne s'agit donc que d'une ligne de code en plus ...

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Par défaut
    Bonjour,

    Comme te l'as indiqué CyberChouan, il suffit que la première instruction de ta boucle 1ere boucle for soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabClient[i] = new Client();
    . Ça remplacera la valeur null a l'emplacement i de ton tableau par une instance de ta classe Client.

  6. #6
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Citation Envoyé par artemis93 Voir le message
    A partir du moment ou l'on crée un tableau de type class, il me semblait que ça suffisait,initialiser chaque case me paraissait redondant et un peu long à faire, si j'ai 100 clients, je fais quoi?
    Bonne Journée
    Tu rajoutes une ligne

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (int i=0;i<tabClient.length;i++){
                            tabClient[i]= new Client();
    			System.out.print("saisir nom  Client" +( i+1) + " : ");
    			tabClient[i].nom=sc.nextLine();
    			System.out.println("saisir Montan tde " +( i+1) + " : ");
    			tabClient[i].Montant=sc.nextDouble();
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Par défaut
    Citation Envoyé par Rei Ichido Voir le message
    beaucoup de classes n'ont pas de constructeur par défaut.
    Je ne suis pas sur a 100% mais il me semble que si une classe n'as pas de constructeur par défaut, le compilateur prend celui de la superclasse, ou, tout du moins, crée l'instance en renseignant les valeurs par défaut.

  8. #8
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Citation Envoyé par MigouW Voir le message
    Je ne suis pas sur a 100% mais il me semble que si une classe n'as pas de constructeur par défaut, le compilateur prend celui de la superclasse, ou, tout du moins, crée l'instance en renseignant les valeurs par défaut.
    Le constructeur par défaut existe tant qu'aucun constructeur existe dans la classe et effectivement il consiste simplement en un appel au constructeur par défaut de la super classe si elle en a un.

    Si jamais un constructeur existe dans la classe et qu'il prend des arguments, le constructeur par défaut ne sera plus utilisable. Idem si la classe mère a un constructeur avec argument(s) mais pas de constructeur par défaut, la définition manuelle d'un constructeur dans la classe fille sera obligatoire.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  9. #9
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par MigouW Voir le message
    Je ne suis pas sur a 100% mais il me semble que si une classe n'as pas de constructeur par défaut, le compilateur prend celui de la superclasse, ou, tout du moins, crée l'instance en renseignant les valeurs par défaut.
    Quand il n'y a pas de constructeur par défaut, c'est souvent qu'il n'y a tout simplement pas de "valeur par défaut" ; et bien souvent le constructeur prend en paramètre un identifiant qui sera donc affecté à l'instanciation, et ne sera ensuite pas modifié (final). Identifiant qui peut lui même être un objet ...

    Si une classe n'a pas de constructeur par défaut, c'est pour une bonne raison, et il serait dangereux d'outrepasser ce comportement voulu par le développeur.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Par défaut
    Bonjour,merci pour toutes vos réponses, cela m'a bien aidé !

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je rajoute qu'une moyen d'éviter la redondance (peut etre pas applicable dans votre cas) entre le new du tableau et le new du contenu, c'est ce genre de notation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Client[]tabClient=new Client[]{new Client(); new Client();
                   new Client(); new Client(); new Client(); };
    A part ça, dans votre cas, il serait bien aussi de mettre un constructeur pour votre classe "Client" qui prend en argument les valeur à initialiser:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class Client{
    	String nom;
    	double montant;
            public Client(String nom, double montant){
                this.nom=nom;
                this.montant = montant;
            }
    }					
    public class Gestion{
    	public static void main(String[]args){
    		Scanner sc = new Scanner(System.in);
    		Client[]tabClient=new Client[5];
    		for (int i=0;i<tabClient.length;i++){
    			System.out.print("saisir nom  Client" +( i+1) + " : ");
    			String nom=sc.nextLine();
    			System.out.println("saisir Montan tde " +( i+1) + " : ");
    			double montant=sc.nextDouble();
                            tabClient[i] = new Client(nom,montant);
                    }
            }
    }

Discussions similaires

  1. Comparaison tableau Excel et classe java avec Objets
    Par cisco.nat dans le forum Collection et Stream
    Réponses: 17
    Dernier message: 19/06/2013, 15h45
  2. Réponses: 29
    Dernier message: 17/07/2006, 01h33
  3. [Reflect] Créer un array d'objets avec le nom de leur classe
    Par Onarap dans le forum API standards et tierces
    Réponses: 18
    Dernier message: 12/06/2006, 12h24
  4. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44
  5. Réponses: 3
    Dernier message: 19/05/2005, 10h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo