97 votes

Java Initialiser un tableau int dans un constructeur

J'ai une classe et dans cette classe j'ai ceci :

  //some code
 private int[] data = new int[3];
 //some code

Puis dans mon constructeur :

 public Date(){
    data[0] = 0;
    data[1] = 0;
    data[2] = 0;
}

Si je fais ça, tout va bien. Les valeurs de données par défaut sont initialisées, mais si je fais plutôt ceci :

 public Date(){
    int[] data = {0,0,0};
}

Ça dit:

 Local variable hides a field

Pourquoi?

Quelle est la meilleure façon d'initialiser un tableau à l'intérieur du constructeur ?

191voto

Bhesh Gurung Points 24875
private int[] data = new int[3];

Cela initialise déjà vos éléments de tableau à 0. Vous n'avez pas besoin de répéter cela à nouveau dans le constructeur.

Dans votre constructeur, cela devrait être:

 data = new int[]{0, 0, 0};

10voto

pauli Points 1851

Vous pouvez soit faire :

 public class Data {
    private int[] data;

    public Data() {
        data = new int[]{0, 0, 0};
    }
}

Ce qui initialise data dans le constructeur, ou :

 public class Data {
    private int[] data = new int[]{0, 0, 0};

    public Data() {
        // data already initialised
    }
}

Ce qui initialise data avant que le code du constructeur ne soit exécuté.

4voto

ratchet freak Points 22412

pourquoi pas simplement

 public Date(){
    data = new int[]{0,0,0};
}

la raison pour laquelle vous avez l'erreur est que int[] data = ... déclare une nouvelle variable et masque le champ data

cependant il faut noter que le contenu du tableau est déjà initialisé à 0 (la valeur par défaut de int )

4voto

wannik Points 3026

En effet, dans le constructeur, vous avez déclaré une variable locale portant le même nom qu'un attribut.

Pour allouer un tableau d'entiers dont tous les éléments sont initialisés à zéro, écrivez ceci dans le constructeur :

 data = new int[3];

Pour allouer un tableau d'entiers qui a d'autres valeurs initiales, mettez ce code dans le constructeur :

 int[] temp = {2, 3, 7};
data = temp;

ou alors:

 data = new int[] {2, 3, 7};

1voto

Mechkov Points 2603

dans votre constructeur, vous créez un autre tableau int :

  public Date(){
  int[] data = {0,0,0};
  }

Essaye ça:

  data = {0,0,0};

REMARQUE : En passant, vous n'avez PAS besoin d'initialiser les éléments de votre tableau s'il est déclaré en tant que variable d'instance. Les variables d'instance obtiennent automatiquement leurs valeurs par défaut, qui pour un tableau d'entiers, les valeurs par défaut sont toutes des zéros.

Si vous aviez déclaré localement un tableau, vous auriez besoin d'initialiser chaque élément.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X