Tableau en java

Résolu
RYME1983 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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();
        
                            }
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
0
RYME1983 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
RYME1983 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Autre chose pour la valeur Compt est globale car j en aurais besoin dans d autres méthodes
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > RYME1983 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0