Tableau en java

Résolu/Fermé
Signaler
Messages postés
3
Date d'inscription
mercredi 11 novembre 2015
Statut
Membre
Dernière intervention
11 novembre 2015
-
Messages postés
16441
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 décembre 2021
-
Bonjour
Je suis débutante j ai créé une classe Traitement et dedans une méthode qui lit des valeurs de type String et les mettre dans un tableau , voici le code le problème je peux pas accéder au tableau , cependant si je mets la création de tableau dans la méthode ça marche , ???????????vous avez une idée de ce bug
public class Traitement {
   
   int         compt ;  
   int        NbreVal ;
   java.util.Scanner entree =   new java.util.Scanner(System.in);
   String tabV[] =new String[NbreVal];   
  
   
    Traitement (int NbreVal){
    this.NbreVal=NbreVal;    
                            }   
          
   public void LireValeur() {     
   System.out.println("Veuillez entrer les valeurs:");   
   for (compt=0;compt<NbreVal-1;compt++){
            tabV[compt]=(entree.next());
                                       }
   
    entree.close();
        
                            }

1 réponse

Messages postés
16441
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 décembre 2021
2 921
Bonjour,

Lorsque tu créés ton tableau
String tabV[] =new String[NbreVal];
quelle est la valeur de NbreVal ? La réponse c'est 0 puisque c'est la valeur par défaut quand tu fais
int NbreVal;
, donc ton tableau tabV ne contient aucune case...

Si tu veux prendre en compte la taille NbreVal que tu utilises dans ton constructeur, alors il faut initialiser ton tableau à ce moment là, pas avant.

Remarques :
Pas besoin de déclarer nbreVal en attribut privé, sa valeur est porté par le tableau :
tabV.length
.
De même pas besoin de déclarer compt dans la classe, c'est une variable locale à la méthode lireValeur.

Et attention : il ne faut jamais fermer System.in parce que tu ne pourras pas le réouvrir (donc pas de
entree.close();
quand le Scanner porte sur System.in)

import java.util.Scanner;

public class Traitement {

    private static final Scanner entree = new Scanner(System.in);

    private final String[] tabV;   

    public Traitement(int nbreVal) {
        tabV = new String[nbreVal];
    }
      
    public void lireValeur() {     
        System.out.println("Veuillez entrer les "+tabV.length+" valeurs :");   
        for (int compt=0; compt<tabV.length; compt++) {
            tabV[compt] = entree.nextLine();
    }
}
La confiance n'exclut pas le contrôle
Messages postés
3
Date d'inscription
mercredi 11 novembre 2015
Statut
Membre
Dernière intervention
11 novembre 2015

Bonjour


C 'est bon le problème est réglé , je vous remercie , a mes connaissance le constructeur va modifier la valeur de NbrVal la je comprends les attributs exécutent avant le constructeur , la création de tableau avec l indice 0 passe avant le constructeur . Merci beaucoup
Messages postés
3
Date d'inscription
mercredi 11 novembre 2015
Statut
Membre
Dernière intervention
11 novembre 2015

Autre chose pour la valeur Compt est globale car j en aurais besoin dans d autres méthodes
Messages postés
16441
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 décembre 2021
2 921 >
Messages postés
3
Date d'inscription
mercredi 11 novembre 2015
Statut
Membre
Dernière intervention
11 novembre 2015

C'est une mauvaise idée de la mettre globale, si tu t'en sers plusieurs fois, déclares là plusieurs fois, mais toujours le plus localement possible, on ne doit mettre en global que ce qui est transverse, c'est à dire que la valeur doit être stocké et transporté d'une méthode à une autre (comme le tableau), mais pour un compteur ça n'a aucun intérêt.