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

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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….)

+0 -0

Cette réponse a aidé l’auteur du sujet

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};

Édité par Kenairod

+0 -0
Auteur du sujet

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);
+0 -0

Cette réponse a aidé l’auteur du sujet

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.

Édité par Kenairod

+0 -0

Cette réponse a aidé l’auteur du sujet

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).

Édité par Kenairod

+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