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 :

définir un tableau d'objets avec un nombre d'objets en paramètre


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut définir un tableau d'objets avec un nombre d'objets en paramètre
    Bonjour,

    j'ai étudié java l'année dernière et le comprenais dans l'ensemble assez bien, mais cette année, je m'y remets pour une autre matière sur la programmation avancée, et c'est la catastrophe, j'ai complètement perdu mes réflexes de programmation!

    Je dois créer un programme qui est pourtant très simple, mais je ne comprends pas, je n'y parviens pas.

    On nous demande de créer un tableau de clients qui ont chacun un nom et un montant de dépenses mensuel pour un trimestre.
    La question, finalement simple, est de savoir combien chaque client a dépensé trimestriellement et combien l'ensemble des clients a dépensé mensuellement, au cours d'un trimestre.

    Je m'y mets, confiant, et je bloque sur le truc le plus élémentaire qu'il soit: créer mon tableau d'objets.

    J'ai décidé de commencer simplement en créant un tableau d'objets avec un nombre de clients en paramètre, qui auraient chacun un nom et un tableau de 4 cases (dépenses des 3 mois et dépenses trimestrielles)

    Sans aller plus loin, j'ai testé, et ça ne marche pas! Pourriez-vous m'aider, s'il vous plait? Mon programme se bloque dès le début!

    Je vous mets ce que j'ai fait et vais continuer à chercher par moi-même dans la journée.

    Merci par avance à ceux qui trouveront le temps de m'aider,
    Johnny

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    class client {
    	private String nom;
    	private int [] tabDepenses = new int [4];
     
    	public void setNomClient(String nom){
    		this.nom = nom;
    	}
     
    	public String getNomClient()
    	{
    		return this.nom;
    	}
    }
     
    class baseClients{
    	int nbClients;
    	client [] tabClients = new client[this.getNbClients()];
     
    	public void setNbClients(int nbClients)
    	{
    		this.nbClients = nbClients;
    	}
     
    	public int getNbClients()
    	{
    		return this.nbClients;
    	}
     
    	public void nombreDeClients(){
    		do
    		{
    			System.out.println("Nombre de clients:");
    			this.nbClients = Terminal.lireInt();
    			if (this.nbClients <= 0)
    			{
    				System.out.println("Le nombre de clients ne peut être négatif ou nul");
    				System.out.println();
    			}
    		} while (this.nbClients <= 0);
    		this.setNbClients(this.nbClients);
    	}
    }
     
    public class Depenses_Trimestrielles {
    	public static void main(String [] args)
    	{
    	   baseClients bc = new baseClients();
    	   bc.nombreDeClients();
    	}
    }

  2. #2
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    Les collections me semble plus indiqué pour ce genre de chose, mais bon.
    Sans aller plus loin, j'ai testé, et ça ne marche pas!
    Je ne vois pas où tu as une erreur ?

    En revanche quand dans baseClients, tu créé ton tableau, nbClients vaut 0.
    Il va donc falloir soit, créer ton tableau dans la méthode setNbClients, ou bien agrandir ton tableau en en faisant une copie.

  3. #3
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut
    "Ça ne marche pas" et "Mon programme se bloque dès le début" c'est un peu court. Il faudrait expliciter le comportement du programme.

    Cela dit oui tu initialises un tableau de dimension 0, il est fort probable que le problème vienne de la.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut
    ah mais oui! C'est vrai que c'est comme ça que l'on faisait. On créait un tableau d'une grande taille (100 par exemple) et, au fur et à mesure que l'on incrémentait le nombre de données (les noms, par exemple), on redimensionnait au final le tableau par une copie.

    Cela me revient à présent.

    En y réfléchissant, je me suis dit qu'une ArrayList devrait bien fonctionner pour ce genre de choses (je n'ai pas encore étudié les collections)

    Je n'ai que peu pratiqué les ArrayList, mais je vais regarder comment on fait (je vais en profiter pour lire des choses sur les collections)

    Merci!

    Dès que j'ai écrit quelque chose dessus, je vous le montre.

    Johnny

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par muad'dib Voir le message
    "Ça ne marche pas" et "Mon programme se bloque dès le début" c'est un peu court. Il faudrait expliciter le comportement du programme.

    Cela dit oui tu initialises un tableau de dimension 0, il est fort probable que le problème vienne de la.
    Eh bien c'est exactement ce qui se passe. Je lance le programme qui me demande le nombre de clients, et ensuite, il est écrit: "arrêté" dans le compilateur.

    Du coup, mon programme ne marche pas et se bloque dès le début (donc aucune erreur indiquée comme une exception par exemple)

  6. #6
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Citation Envoyé par johnny3 Voir le message
    Eh bien c'est exactement ce qui se passe. Je lance le programme qui me demande le nombre de clients, et ensuite, il est écrit: "arrêté" dans le compilateur.
    Ton programme est tout simplement fini. Il n'est ni bloqué, ni interrompu par une exception. Toutes choses a une fin et les programmes n'échappe pas à cette règle universelle

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par visiwi Voir le message
    Ton programme est tout simplement fini. Il n'est ni bloqué, ni interrompu par une exception. Toutes choses a une fin et les programmes n'échappe pas à cette règle universelle
    lol, je comprends mieux!

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut
    bon, finalement, j'ai écrit à l'ancienne version, sans ArrayList (je me suis heurté à quelques difficultés pour l'utiliser partout, je ne suis pas encore parfaitement à l'aise avec)

    C'est un peu lourd, surtout que je répète les mêmes lignes pour les mois 1, 2 et 3, mais je n'ai pas réussi sur le moment à faire plus léger.

    Je n'ai pas mis les exceptions. Des idées pour alléger mon programme?

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    class client {
    	private String nom;
    	private int [] tabDepenses = new int[4];
     
    	public void setNomClient(String nom)
    	{
    		this.nom = nom;
    	}
     
    	public String getNomClient()
    	{
    		return this.nom;
    	}
     
    	public int calculMontantTrimestrielle()
    	{
    		this.tabDepenses[3] = this.tabDepenses[0] + this.tabDepenses[1] + this.tabDepenses[2];
    		return this.tabDepenses[3];
    	}
     
    	public int getDepensesMois1()
    	{
    		return this.tabDepenses[0];
    	}
     
    	public int getDepensesMois2()
    	{
    		return this.tabDepenses[1];
    	}
     
    	public int getDepensesMois3()
    	{
    		return this.tabDepenses[2];
    	}
     
    	static client lireDonneesClients()
    	{
    		client res = new client();
    		Terminal.ecrireStringln("Entrez le nom du client: ");
    		res.nom = Terminal.lireString();
     
    		for (int i = 1; i <= 3; i++)
    		{
    			Terminal.ecrireStringln("Entrez le montant des dépenses du mois " + i + ": ");
    			res.tabDepenses[i-1] = Terminal.lireInt();
    		}		
    		Terminal.sautDeLigne();
    		return res;
    	}
     
    	void affichageDonneesClients()
    	{
    		Terminal.ecrireStringln("Nom du client:" + this.nom);
    		Terminal.ecrireStringln("Dépenses du 1er mois:" + this.getDepensesMois1() + " euros.");
    		Terminal.ecrireStringln("Dépenses du 2nd mois:" + this.getDepensesMois2() + " euros.");
    		Terminal.ecrireStringln("Dépenses du 3ième mois:" + this.getDepensesMois3() + " euros.");
    		Terminal.ecrireStringln("Dépenses trimestrielles:" + this.calculMontantTrimestrielle());
    		Terminal.sautDeLigne();
    	}
    }
    class baseClients {
    	client [] tabClients = new client[100];
    	private int nbClients = 0;
    	private int depensesCollectivesMois1 = 0;
    	private int depensesCollectivesMois2 = 0;
    	private int depensesCollectivesMois3 = 0;
     
    	void ecrireBaseClients()
    	{
    		for (int i = 0; i < nbClients; i++)
    		{
    			(this.tabClients[i]).affichageDonneesClients();
    		}
    		this.calculMontantMois1();
    		this.calculMontantMois2();
    		this.calculMontantMois3();
    		System.out.println("Dépenses collectives du premier mois: " + this.getDepensesCollectivesMois1());
    		System.out.println("Dépenses collectives du second mois: " + this.getDepensesCollectivesMois2());
    		System.out.println("Dépenses collectives du troisième mois: " + this.getDepensesCollectivesMois3());
    	}
     
    	void ajouter(client cl)
    	{
    		this.tabClients[this.nbClients] = cl;
    		this.nbClients++;
    	}
     
    	public void calculMontantMois1()
    	{
    		for (int i = 0; i < this.nbClients; i++)
    		{
    			this.depensesCollectivesMois1 += this.tabClients[i].getDepensesMois1();
    		}
    	}
     
    	public void calculMontantMois2()
    	{
    		for (int i = 0; i < this.nbClients; i++)
    		{
    			this.depensesCollectivesMois2 += this.tabClients[i].getDepensesMois2();
    		}
    	}
     
    	public void calculMontantMois3()
    	{
    		for (int i = 0; i < this.nbClients; i++)
    		{
    			this.depensesCollectivesMois3 += this.tabClients[i].getDepensesMois3();
    		}
    	}
     
    	public int getDepensesCollectivesMois1(){
    		return this.depensesCollectivesMois1;
    	}
     
    	public int getDepensesCollectivesMois2(){
    		return this.depensesCollectivesMois2;
    	}
     
    	public int getDepensesCollectivesMois3(){
    		return this.depensesCollectivesMois3;
    	}
     
    }
    public class Depenses_Trimestrielles {
    	public static void main(String [] args)
    	{
    		baseClients bc = new baseClients();
    		char reponse = 'n';
    		do
    		{
    			bc.ajouter(client.lireDonneesClients());
    			Terminal.ecrireStringln("Voulez-vous rentrer un autre client?");
    			reponse = Terminal.lireChar();
    			Terminal.sautDeLigne();
    		} while (reponse != 'n'|| reponse!= 'N');
    		bc.ecrireBaseClients();
    	}
    }
    Merci par avance,
    Johnny

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 121
    Points : 136
    Points
    136
    Par défaut
    Des idées pour alléger mon programme?
    A partir de Java 1.5 (? je crois)
    Lorsque tu parcours une table ou une collection tu peux te passer d'indices et par exemple écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public int getMontantMois(int indexMois){
       depenses=0;
       for (Client c : tabClients){
          depenses += c.getDepensesMois(indexMois);
       }
       return depenses;
    }
    Si tu déclares...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Client> tabClient=new ArrayList<Client>();
    ...ou un autre type de collection pour ta table, cette boucle resteras inchangée.
    C'est plus lisible et plus facile à maintenir.

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par rebel64 Voir le message
    A partir de Java 1.5 (? je crois)
    Lorsque tu parcours une table ou une collection tu peux te passer d'indices et par exemple écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public int getMontantMois(int indexMois){
       depenses=0;
       for (Client c : tabClients){
          depenses += c.getDepensesMois(indexMois);
       }
       return depenses;
    }
    Si tu déclares...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Client> tabClient=new ArrayList<Client>();
    ...ou un autre type de collection pour ta table, cette boucle resteras inchangée.
    C'est plus lisible et plus facile à maintenir.
    Oui, java 1.5.

    Merci, ça me donne des idées, car j'ai découvert les ArrayList avec java Tête la première, je lis un peu le livre de delannoy dessus, mais pour le moment, je ne parviens pas à l'utiliser partout quand j'ai fait un tableau à la base.

    Merci encore!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Macro envoyer objet avec choix de l'objet
    Par caronjo dans le forum Macros Access
    Réponses: 0
    Dernier message: 31/10/2013, 17h27
  2. Réponses: 36
    Dernier message: 15/05/2013, 14h44
  3. Réponses: 0
    Dernier message: 11/10/2012, 19h35
  4. Une méthode void avec un nombre non prédéfini de paramètres
    Par ROUGE87 dans le forum Général Java
    Réponses: 10
    Dernier message: 26/04/2011, 18h13
  5. Réponses: 3
    Dernier message: 10/03/2011, 12h49

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