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 :

erreur de variables dans le constructeur


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Par défaut erreur de variables dans le constructeur
    bonjour,
    je fais un programme de gestion de dossier en grande ecole.
    Je travail avec DRJAVA qui est amplement suffisant pour les algorithmes de base.

    je rencontre un probleme avec mon constructeur de classe, au niveau de l'affectation des variables.

    voici un peu de code :

    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
     
    import java.lang.String;
    import java.util.Scanner;
     
     
    public class DossierCandidatureGER{
      // Ici des attributs
      String nom_cdt;
      String numero_cdt;
      boolean emarge;
      boolean epreuve_ecrit;
      int note_ecrit;
      int note_orale;
      boolean epreuve_orale;
      boolean absence;
      boolean admit;
     
      // constructeur
      public DossierCandidatureGER(String nom, String numero){
        nom =nom_cdt; // ici quelque chose ne va pas
        numero = numero_cdt; // ici quelque chose ne va pas
        emarge=false;
        epreuve_ecrit = false;
        note_ecrit = 0;
        note_orale = 0;
        epreuve_orale = false;
        absence = true;
        admit = false;
     
      }
     public void enregistrerNoteEpreuveEcrite(int note){
            Scanner sc = new Scanner(System.in); // creation d'un objet scanner
         note_ecrit = sc.nextInt(); // lecture d'
     
     
      }
      public void publierResultatEcrit(){
        note_ecrit =note_ecrit;
     
      }
      public void enregistrerNoteEpreuveOrale(int note){
           Scanner sc = new Scanner(System.in); // creation d'un objet scanner
         note_orale = sc.nextInt(); // lecture d'
         note = note_orale;
      }
    // Les méthodes statiques ...
     
    // le programme principal
     
      public static void main(String[] args){
       DossierCandidatureGER exam_ger = new DossierCandidatureGER("nom", "numero");
       exam_ger.enreg_cdt();
       exam_ger.enregistrerNoteEpreuveEcrite(note_ecrit); // le compilateur s'arrête ici
       exam_ger.publierResultatEcrit();
       exam_ger.enregistrerEmargementEpreuveEcrite();
       exam_ger.enregistrerAbsenceALOral();
       exam_ger.enregistrerNoteEpreuveOrale(note_orale);
       exam_ger.publierResultatFinal();
       System.out.println(exam_ger.toString());
     
      }

    erreur
    2 errors found:
    File: /home/phipo/fun-mooc-java-obj/DossierCandidatureGER.java [line: 80]
    Error: non-static variable note_ecrit cannot be referenced from a static context
    File: /home/phipo/fun-mooc-java-obj/DossierCandidatureGER.java [line: 84]
    Error: non-static variable note_orale cannot be referenced from a static context

  2. #2
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    si tu veux utiliser directement les variables dans la main qui est statique,
    il faudra les declarer statique:
    ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      static int note_ecrit;
    static int note_orale;
    ou tu accedes par les getter sur ces variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exam_ger.enregistrerNoteEpreuveEcrite(exam_ger.getNote_ecrit());
    Eric

  3. #3
    Membre éclairé Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Par défaut
    j'ai fait comme tu me l'as ecrit mais j'ai toujours des erreurs.


    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
     
    public class DossierCandidatureGER{
      // Ici des attributs
      String nom_cdt;
      String numero_cdt;
      boolean emarge;
      boolean epreuve_ecrit;
      static int note_ecrit;
      static int note_orale;
      boolean epreuve_orale;
      boolean absence;
      boolean admit;
     
    // constructeur
     
    // méthodes
     
     
     
     
     public static void main(String[] args){
       DossierCandidatureGER exam_ger = new DossierCandidatureGER("nom", "numero");
       exam_ger.enreg_cdt();
       exam_ger.enregistrerNoteEpreuveEcrite(note_ecrit);
       exam_ger.publierResultatEcrit();
       exam_ger.enregistrerNoteEpreuveEcrite(exam_ger.Getnote_ecrit());
       exam_ger.enregistrerAbsenceALOral();
       exam_ger.enregistrerNoteEpreuveOrale(exam_ger.getNote_orale());
       exam_ger.publierResultatFinal();
       System.out.println(exam_ger.toString());
     
      }

  4. #4
    Membre émérite Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 593
    Par défaut
    Citation Envoyé par philo71 Voir le message
    bonjour,
    je fais un programme de gestion de dossier en grande ecole.
    Je travail avec DRJAVA qui est amplement suffisant pour les algorithmes de base.

    je rencontre un probleme avec mon constructeur de classe, au niveau de l'affectation des variables.

    voici un peu de code :

    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
     
    import java.lang.String;
    import java.util.Scanner;
     
     
    public class DossierCandidatureGER{
      // Ici des attributs
      String nom_cdt;
      String numero_cdt;
      boolean emarge;
      boolean epreuve_ecrit;
      int note_ecrit;
      int note_orale;
      boolean epreuve_orale;
      boolean absence;
      boolean admit;
     
      // constructeur
      public DossierCandidatureGER(String nom, String numero){
        nom =nom_cdt; // ici quelque chose ne va pas
        numero = numero_cdt; // ici quelque chose ne va pas
    Et si tu essayais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      nom_cdt = nom;
      numero_cdt = numero;
    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
        emarge=false;
        epreuve_ecrit = false;
        note_ecrit = 0;
        note_orale = 0;
        epreuve_orale = false;
        absence = true;
        admit = false;
        
      }
     public void enregistrerNoteEpreuveEcrite(int note){
            Scanner sc = new Scanner(System.in); // creation d'un objet scanner
         note_ecrit = sc.nextInt(); // lecture d'
      
      
      }
      public void publierResultatEcrit(){
        note_ecrit =note_ecrit;     // NE SERT A RIEN
      
        
      }
      public void enregistrerNoteEpreuveOrale(int note){
           Scanner sc = new Scanner(System.in); // creation d'un objet scanner
         note_orale = sc.nextInt(); // lecture d'
         note = note_orale;
      }
    // Les méthodes statiques ...
    
    // le programme principal
    
      public static void main(String[] args){
       DossierCandidatureGER exam_ger = new DossierCandidatureGER("nom", "numero");
       exam_ger.enreg_cdt();
       exam_ger.enregistrerNoteEpreuveEcrite(note_ecrit); // le compilateur s'arrête ici
       exam_ger.publierResultatEcrit();
       exam_ger.enregistrerEmargementEpreuveEcrite();
       exam_ger.enregistrerAbsenceALOral();
       exam_ger.enregistrerNoteEpreuveOrale(note_orale);
       exam_ger.publierResultatFinal();
       System.out.println(exam_ger.toString());
        
      }
    Pour ton constructeur, tu affectes des paramètres avec les valeurs de variables membres... cf ci-dessus.
    Dans tes méthodes enregistrerNoteEpreuveEcrite et enregistrerNoteEpreuveOrale tu passes en paramètre une valeur que tu lis ensuite dans le flux d'entrée. La logique de ce code est incompréhensible en l'état.

  5. #5
    Membre éclairé Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Par défaut
    bonjour,
    j'ai refais mon code source avec quelques problèmes avec les GETTER que je ne comprends pas très bien.
    Je passe une certification java objet et l'écriture du code est imposé.

    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
     
    public class DossierCandidatureGER{
      // Ici des attributs
      String nom_cdt;
      String numero_cdt;
      boolean emarge;
      boolean epreuve_ecrit;
      static int note_ecrit;
      static int note_orale;
      boolean epreuve_orale;
      boolean absence;
      boolean admit;
      String admition;
      static String emargement;
     
      // constructeur
      public DossierCandidatureGER(String nom, String numero){
        nom_cdt = nom;
        numero_cdt = numero;
        emarge=false;
        epreuve_ecrit = false;
        note_ecrit = 0;
        note_orale = 0;
        epreuve_orale = false;
        absence = true;
        admit = false;
        admition = "";
        emargement = "";
     
      }
     
    // des méthodes 
     
     
     
    public void enregistrerNoteEpreuveEcrite(int ecrit){
         System.out.println("Note ecrite : "); 
         Scanner sc = new Scanner(System.in); // creation d'un objet scanner
         note_ecrit = sc.nextInt(); // lecture d'
     
      }
      public String publierResultatEcrit(){
         return "Resultat Ecrit : " + String.valueOf(note_ecrit);
     
      }
      public void enregistrerNoteEpreuveOrale(int orale){
         System.out.println("Note Orale : "); 
         Scanner sc = new Scanner(System.in); // creation d'un objet scanner
         note_orale = sc.nextInt(); // lecture d'
    // des méthodes

    programme principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      public static void main(String[] args){
       DossierCandidatureGER exam_ger = new DossierCandidatureGER("nom", "numero");
       exam_ger.enreg_cdt();
       emargement = exam_ger.enregistrerEmargementEpreuveEcrite();
       note_ecrit = exam_ger.enregistrerNoteEpreuveEcrite(exam_ger.getNote_ecrit());
       exam_ger.publierResultatEcrit();
       exam_ger.enregistrerAbsenceALOral();
       note_orale = exam_ger.enregistrerNoteEpreuveOrale();
       exam_ger.publierResultatFinal();
       System.out.println(exam_ger.toString());
     
      }
    je ne comprends l'algorithmie des Getters!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void enregistrerNoteEpreuveEcrite(int ecrit)
     
     public void enregistrerNoteEpreuveOrale(int orale)
    comment récupérer les variable "ecrit" et "orale" dans mon programme principal ?

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    oublie la certification, c'est trop tôt. Quel que soit l'examen, s'il porte sur Java, alors il est indispensable d'être à l'aise avec ces choses-là depuis un certain temps.
    Après tout, une certification indique au moins si on est capable de programmer en Java, et tu ne le seras pas avant un certain temps.

    C'est difficile de comprendre de quoi tu parles avec ton code.

    Mais là tu nous parles sans arrêt de "getter". Où ça des getter ? Je ne vois pas de getter dans ton code.
    Pour rappel, un "getter" est une méthode :
    - sans paramètre
    - non-privée (et en général publique)
    - dont le nom commence par "get" (ou possiblement par "is" si elle renvoie un booléen)
    - et le reste du nom est le nom de la chose qu'on veut obtenir de l'objet. Exemple : "getName"
    - qui renvoie la donnée demandée (et donc, pas void)
    - qui n'a pas d'effet de bord et ne fait rien d'autre que renvoyer la donnée demandée.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Person {
      private final String name;
      private final int age;
      public Person(String name, int age) {
        this.name = name;
        this.age = age;
      }
      public String getName() {
        return name;
      }
      public int getAge() {
        return age;
      }
    }
    "getName" et "getAge" sont des getters.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éclairé Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Par défaut
    voila mon code complet :

    J'ai annoté les deux dernières méthodes possèdant des paramètres "int ecrit" et "int orale" que je doit récupérer dans mon programme principal.
    J'espère être plus clair !



    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
    import java.lang.String;
    import java.util.Scanner;
     
     
    public class DossierCandidatureGER{
      // Ici des attributs
      String nom_cdt;
      String numero_cdt;
      boolean emarge;
      boolean epreuve_ecrit;
      static int note_ecrit;
      static int note_orale;
      boolean epreuve_orale;
      boolean absence;
      boolean admit;
      String admition;
      static String emargement;
     
      // constructeur
      public DossierCandidatureGER(String nom, String numero){
        nom_cdt = nom;
        numero_cdt = numero;
        emarge=false;
        epreuve_ecrit = false;
        note_ecrit = 0;
        note_orale = 0;
        epreuve_orale = false;
        absence = true;
        admit = false;
        admition = "";
        emargement = "";
     
      }
      public String enreg_cdt(){
        System.out.println("Nom Candidat : ");
        Scanner sc = new Scanner(System.in); // creation d'un objet scanner
        nom_cdt = sc.nextLine(); // lecture d'
        System.out.println("numéro INSEE : ");
        //Scanner sc = new Scanner(System.in); // creation d'un objet scanner
        numero_cdt = sc.nextLine(); // lecture d'
        return nom_cdt + " " + numero_cdt;
      }
     
      public String enregistrerEmargementEpreuveEcrite(){
        System.out.println("Emarge Epreuve Ecrit (true/false) : ");
        Scanner scb = new Scanner(System.in); // creation d'un objet scanner
        emarge = scb.nextBoolean();
        if (emarge=true){
          emargement = "Candidat Emargé : ";
        }
        else {
          emargement = "Candidat NON Emargé : ";
        }
        return emargement;
      }
      public void enregistrerNoteEpreuveEcrite(int ecrit){ // comment avec un getter récupérer la variable "note_ecrit" en paramètre de ma méthode "ecrit"
         System.out.println("Note ecrite : "); 
         Scanner sc = new Scanner(System.in); // creation d'un objet scanner
         note_ecrit = sc.nextInt(); // lecture d'
     
      }
      public String publierResultatEcrit(){
         return "Resultat Ecrit : " + String.valueOf(note_ecrit);
     
      }
      public void enregistrerNoteEpreuveOrale(int orale){// comment avec un getter récupérer la variable "note_orale" en paramètre de ma méthode "orale"
         System.out.println("Note Orale : "); 
         Scanner sc = new Scanner(System.in); // creation d'un objet scanner
         note_orale = sc.nextInt(); // lecture d'
     
      }
      public void enregistrerAbsenceALOral(){
        System.out.println("Absence oral (true/false) : "); 
        Scanner sca = new Scanner(System.in); // creation d'un objet scanner
        absence = sca.nextBoolean();
     
      }
      public String publierResultatFinal(){
        if (note_ecrit >= 10) {
          if (note_orale >=10) {
            admit = true;
            admition = "Admit";
     
          }
          else {
            admit = false;
            admition = "NON  Admit";
          }
        }  
      return admition;
      }
     
      public String toString(){
        String resultat_gene = "Nom Candidat :  " + nom_cdt + "  numero INSEE : " + numero_cdt + " note_ecrit : " + note_ecrit + " note orale : " + note_orale  + " Candidat : " + admition;
     
       return resultat_gene;
      }
    // programme principal
      public static void main(String[] args){
       DossierCandidatureGER exam_ger = new DossierCandidatureGER("nom", "numero");
       exam_ger.enreg_cdt();
       emargement = exam_ger.enregistrerEmargementEpreuveEcrite();
       note_ecrit = exam_ger.enregistrerNoteEpreuveEcrite(exam_ger.getNote_ecrit()); // ici getter
       exam_ger.publierResultatEcrit();
       exam_ger.enregistrerAbsenceALOral();
       note_orale = exam_ger.enregistrerNoteEpreuveOrale(); // ici getter
       exam_ger.publierResultatFinal();
       System.out.println(exam_ger.toString());
     
      }  
     
    }

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Non, désolé.

    Nous sommes probablement face à un problème XY.

    La question "comment avec un getter récupérer la variable "note_ecrit" en paramètre de ma méthode "ecrit"", donne l'impression que tu as déjà décidé de faire un certains nombres de choses, et qu'une fois faites, tu te retrouves bloqué quelque part, et tu te demandes comment continuer à avancer tout en conservant ce que tu as fait jusque-là.
    Mais :
    - ce que tu as fait jusque-là, et tes décisions pour l'instant, ce n'est pas clair. Tout doit être clair, sinon il est impossible de t'aider.
    - ce que tu as fait jusque-là, c'est sûrement erroné, et il faut l'effacer et recommencer depuis le début. Tu ne poses pas une question qui suggère qu'on puisse faire ça, et pourtant il faudra bien.

    Bref.

    Il ne faut pas que tu demandes comment récupérer quelque chose, ni en imposant avec quoi.
    Il faut que tu dises, avec le plus de recul possible, ce que tu cherches à faire en tout. Avec ton programme, pas avec une méthode ou une variable précise. Ce que tu cherches à faire, entièrement.

    Exemple : "Je dois faire un programme qui demande deux nombre à l'utilisateur, et qui affiche la somme de ces deux nombres. Voici mon programme pour l'instant".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Résolu] Erreur : Undefined variable dans un exec INSERT INTO
    Par yellowduff dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 03/12/2018, 11h27
  2. [PowerShell] Erreur de variable dans double "Do-While" instructions
    Par Lil'Broler dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 02/10/2018, 16h57
  3. [Python 3.X] Variables dans méthode constructeur et méthode de classe : qui est qui?
    Par Mr ZEE dans le forum Général Python
    Réponses: 6
    Dernier message: 04/07/2018, 17h42
  4. Erreur 1008 variable dans order by : Transact SQL
    Par benny-blanco dans le forum Développement
    Réponses: 2
    Dernier message: 23/09/2012, 20h48
  5. Erreur, lors de variables dans la clause LIMIT
    Par ToxiZz dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/11/2006, 19h32

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