problème avec les tableaux d'entiers...

Le problème exposé dans ce sujet a été résolu.

Bonjour j’aimerais remplir mes tableaux d’entiers en fonction de la condition switch mais le code ne fonctionne pas :

int[] monTableau;

switch (monNombre()) {
    case 0:
        monTableau = {4, 7};
        break;
    case 1:
        monTableau = {8, 2};
        break;
    case 2:
        monTableau = {6, 5};
}

// Remarque :
// public void monTraitement(int[] data);
monTraitement(monTableau);

Erreur de compilation: Array constants can only be used in initializers

Une astuce pour contourner ce problème ? (déjà essayé avec ArrayList<Integer> et int[].add() mais ne fonctionne pas….)

En Java cette syntaxe sert a initialiser un tableau, or là tu as déclaré le tableau sans l’initialiser, tu ne peux donc plus utiliser cette syntaxe dans la suite du code dans ton switch.

Il faut donc que tu initialise un nouveau tableau à chaque fois en remplaçant tes :

monTableau = {X, Y};

Par des :

monTableau = new int[]{X, Y};
+0 -0

Je reviens vers ce sujet car j’ai un souci tres similaire…

Je dois créer une liste de chaine de caractères sauf que ça ne compile pas :

String[] monTableau = {};

for (String s: maFonction()) {
    monTableau += new String[]{s};
}

// public void monTraitement(String[] s);
monTraitement(monTableau);

Alors là effectivement, il faut que tu donnes la taille de ton tableau à sa déclaration.

Lorsque tu écris : String[] monTableau = {}; tu dis que ton tableau de String contient 0 élément car ici, tu l’initialise avec aucun élément : {}.

Donc, par la suite tu ne peux pas y ajouter de nouvel élément : monTableau += new String[]{s}; ça c’est impossible. Un tableau a une taille fixe, tu ne peux pas y ajouter plus d’éléments que ce avec quoi tu l’as déclaré ou initialisé.

Si tu sais combien d’éléments tu dois mettre dans ton tableau au total il faudrait que tu procèdes ainsi :

String[tailleDuTableau] monTableau;

for (i = 0; i < tailleDuTableau; i++) {
    monTableau[i] = new String(maFonction());
}

En revanche, si tu ne sais pas à l’avance combien d’éléments va contenir ton tableau, je te conseille de ne pas utiliser de tableau mais plutôt un objet appelé ArrayList, qui est, en gros, un tableau de taille variable. Que tu pourrais utiliser ainsi :

ArrayList<String> monTableau = new ArrayList<String>();

for (String s: maFonction()) {
    monTableau.add(s);
}

Ainsi, tu ne sera plus "embêté" par la taille prédéfinie que nécessite un tableau.

+0 -0

Oui, tu pourrais le convertir ainsi :

String[] monTableau = monArrayList.toArray(new String[0]);

La syntaxe est un peu particulière, en effet, on est obligé de passer un tableau de type String en paramètre, afin que toArray() sache quel type d’objet il doit renvoyer. Sinon il renverrait un objet de type Object (source : https://stackoverflow.com/questions/4042434/converting-arrayliststring-to-string-in-java/4042464#4042464).

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte