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

avec Java Discussion :

Simple incrementation d'une variable


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 15
    Par défaut Simple incrementation d'une variable
    Bonjour je travaille sur un programme qui créé et modifie un Journal. J'ai la classe abstraite journaliste et des sous-classes de journalistes. Je dois pouvoir ajouter des journalistes et obtenir la liste des journalistes et leurs propriétés. J'ai écrit un main qui me renvoie un message d'erreur.
    Je pense surtout que le problème vient du fait que le nombre de Journalistes ne s'incremente pas correctement ou que j'ai mal déclaré les tableaux de journaliste.

    La classe Journal
    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
    package Classes;
     
    public class Journal  {
    	private String nom;
    	private Journaliste[] journalistes=new Journaliste [50];
    	private int nJournalistes=0;
    		public Journal(String nom, Journaliste[] journalistes){
    		this.nom=nom;
    		this.journalistes=journalistes;
    	}
    	public boolean addJournaliste(Journaliste j){
    		for(int i=0;i<journalistes.length;i++){
    			if (journalistes[i]==j){
    				System.out.println("Erreur : "+j.getNom()+" déjà présent !");
    				return false;
    			}
    			else 
    			journalistes[nJournalistes + 1]=j;
    			System.out.println("Embauche de "+j.getNom());
    			nJournalistes++;
    		}	
    		return true;
    	}
    	public String toString(){
    		String res = "Au journal "+nom+ " sont employés : \n";
    		for(int i=0;i<nJournalistes;i++){
    			res+= journalistes[i].toString()+" pour la rubrique "+journalistes[i].getRubrique();			
    		}
    		return res;
    	}
    }
    La classe journaliste
    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
    package Classes;
     
    public abstract class Journaliste {
    	private String nom;
    	private String rubrique;
    	protected Journaliste(String nom, String rubrique){
    		this.nom=nom;
    		this.rubrique=rubrique;
    	}
    	public abstract String who();
    	public String toString(){
    		return nom+" : "+who();
    	}
    	public String getRubrique(){
    		return rubrique;
    	}
    	public String getNom(){
    		return nom;
    	}
    }
    Mon main
    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
    package Test;
    import Classes.*;
    public class prog {
     
    	public static void main(String[] args) {
    		String nom= "Science Today";
    		Journaliste[] journalistes = null;
    		Journal d = new Journal(nom,journalistes);
    		Journaliste TP = new Reporter("Thomas Pesquet","Espace");
    		Journaliste RO = new Reporter("Raymond Oliver","Cuisine");
    		d.addJournaliste(TP);
    		d.addJournaliste(RO);
    		String r= d.toString();
    		System.out.println(r);
    	}
     
    }
    Et voici le message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "main" java.lang.NullPointerException
    	at Classes.Journal.addJournaliste(Journal.java:12)
    	at Test.prog.main(prog.java:11)

  2. #2
    Membre Expert Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 447
    Par défaut
    Quel est l'intérêt de faire un héritage plutôt que d'avoir une variable représentant leur fonction?

  3. #3
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut

    Quand tu appelles le constructeur de Journal dans ton main (pour créer l'instance d), tu passes en paramètre nom (qui vaut "Science Today") et journalistes (qui est null !).
    En suite, quand tu ajoutes un journaliste via la fonction addJournaliste() : dans cette fonction tu consultes journalistes.length, mais journalistes est null ! tu ne peux pas appeler la propriété .length d'une référence null.
    D'où l'erreur : NullPointerException

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 15
    Par défaut
    J'avais mis le null parce que je cherchais à initialiser mais je viens de me rendre compte que ma vraie erreur était dans le toString() où mon i était initié à 0 alors que j'ai programmé le tableau de Journaliste de telle sorte que la première case soit vide.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 15
    Par défaut
    Du coup j'ai eu un affichage mais apparemment le nombre de fois que les professions et rubriques s'affichent correspond à la position du journaliste dans le tableau.
    J'ai l'impression d'avoir fait n'importe au niveau de boucle for mais je ne sais pas où.

    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
    Embauche de Thomas Pesquet
    Erreur : Thomas Pesquet déjà présent !
    Embauche de Raymond Oliver
    Embauche de Raymond Oliver
    Erreur : Raymond Oliver déjà présent !
    Embauche de Grishka Bogdanov
    Embauche de Grishka Bogdanov
    Embauche de Grishka Bogdanov
    Embauche de Grishka Bogdanov
    Erreur : Grishka Bogdanov déjà présent !
    Au journal Science Today sont employés : 
    Thomas Pesquet : Reporter pour la rubrique Espace
    Raymond Oliver : Reporter pour la rubrique Cuisine
    Raymond Oliver : Reporter pour la rubrique Cuisine
    Grishka Bogdanov : Editorialiste pour la rubrique  
    Grishka Bogdanov : Editorialiste pour la rubrique  
    Grishka Bogdanov : Editorialiste pour la rubrique
    Classe Journaliste
    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
    package Classes;
     
    public class Journal  {
    	//déclaration des attributs (pas besoin d'initialiser)
    	private String nom;
    	private Journaliste[] journalistes;
    	private int nJournalistes;
    	//constructeur de Journal
    	public Journal(String nom, Journaliste[] journalistes, int nJournalistes){
    		this.nom=nom;
    		this.journalistes=journalistes;
    		this.nJournalistes=nJournalistes;
    	}
    	public boolean addJournaliste(Journaliste j){
    		for(int i=0;i<journalistes.length;i++){
    			if (journalistes[i]==j){
    				System.out.println("Erreur : "+j.getNom()+" déjà présent !");
    				return false;
    			}
    			else {
    			journalistes[nJournalistes +1]=j; //ajouter le journaliste à la liste
    			System.out.println("Embauche de "+j.getNom());
    			nJournalistes++;
     
    			}
    		}
    		return true;	
    	}
    	public String toString(){
    		String res = "Au journal "+nom+ " sont employés : \n";
    		for(int i=1;i<nJournalistes;i++){
    			res+= (journalistes[i]).toString()+" pour la rubrique "+(journalistes[i]).getRubrique()+"\n";			
    		}
    		return res;
    	}
    }
    le main:
    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
    package Test;
    import Classes.*;
    public class prog {
     
    	public static void main(String[] args) {
    		String nom= "Science Today";
    		String []r= {"Espace","Cuisine","Santé"};
    		int nJournalistes=0;
    		Journaliste[] journalistes= new Journaliste[50] ;
    		Journal d = new Journal(nom,journalistes,nJournalistes);
    		Journaliste GB= new Editorialiste("Grishka Bogdanov"," ");
    		Journaliste TP = new Reporter("Thomas Pesquet",r[0]);
    		Journaliste RO = new Reporter("Raymond Oliver",r[1]);
    		d.addJournaliste(TP);
    		d.addJournaliste(RO);
    		d.addJournaliste(GB);
    		String z= d.toString();
    		System.out.println(z);
    	}
     
    }

  6. #6
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut
    Le problème est là :

    Citation Envoyé par Mentos4k Voir le message
    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
     
    	public boolean addJournaliste(Journaliste j){
    		for(int i=0;i<journalistes.length;i++){
    			if (journalistes[i]==j){
    				System.out.println("Erreur : "+j.getNom()+" déjà présent !");
    				return false;
    			}
    			else {
    			journalistes[nJournalistes +1]=j; //ajouter le journaliste à la liste
    			System.out.println("Embauche de "+j.getNom());
    			nJournalistes++;
     
    			}
    		}
    		return true;	
    	}
    Tu fais une boucle pour chercher si le journaliste est déjà présent. Dans cette boucle, si à un moment tu tombes sur le journaliste, alors il est présent et tu quittes (Ça c'est bien, c'est ce qu'il faut faire).
    Mais, à chaque tour de boucle, si tu n'es pas tombé sur le journaliste, alors tu l'ajoutes. Et là sa pose problème.
    Dans ton exemple de Grishka Bogdanov, au premier tour de boucle tu tombe sur "Thomas Pesquet" (qui n'est pas Grishka Bogdanov) donc tu ajoutes Grishka Bogdanov.
    Au deuxième tour, tu tombes sur Raymond Olivier (qui n'est pas Grishka Bogdanov) donc tu ajoutes Grishka Bogdanov. /!\ Erreur tu l'as jouté 2 fois !
    Tu vois le truc ?

    Après tu as un autre souci avec ton histoire d'indice de tableau. Pourquoi veux-tu que le premier champ soit vide ?
    Si tu restes avec le premier champ vide, alors quand tu boucles sur ton tableau, il faut commencer avec i=1 et pas i=0 (pour ignorer la première case)

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 15
    Par défaut
    Je vois maintenant merci. Du coup, je vais me tourner vers un while.
    En ce qui concerne les indices c'est ok. Dans le toString() de Journal, je parcours le tableau des journalistes à partir de i=1.

  8. #8
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut
    Utiliser un while ne changera rien. Je te conseille même de rester avec un for car ça à plus de logique (tu connais à l'avance ton nombre de tour : journalistes.length).

    Ce qu'il faut c'est ajouté ton nouveau journaliste après la boucle, pas dedans. Si tu sort de la boucle c'est que tu as parcouru tout le tableau sans rencontré de doublon, tu peux donc ajouter ton nouveau journaliste.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 15
    Par défaut
    J'ai rectifié et tout fonctionne bien. Merci beaucoup

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

Discussions similaires

  1. incrementer nombre à une variable
    Par stefanelle dans le forum Langage
    Réponses: 6
    Dernier message: 28/08/2009, 15h44
  2. dernier auto-increment vers une variable
    Par H-bil dans le forum C#
    Réponses: 22
    Dernier message: 06/06/2008, 08h09
  3. Incrémentation d'une variable
    Par tarzanjane dans le forum Langage
    Réponses: 10
    Dernier message: 17/07/2006, 16h04
  4. [XSLT] incrementer une variable
    Par Landolsi dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 02/11/2005, 10h44
  5. [débutant]Problemem d'incrementation d'une variable
    Par sakuragikan dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/08/2005, 08h16

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