0
votes

Comment afficher la somme des éléments de myArray à l'aide de boucles for imbriquées améliorées?

J'ai créé un programme pour une affectation qui me demande d'afficher les éléments d'un tableau à l'aide de boucles for imbriquées améliorées.

J'obtiens l'erreur qu'il ne peut pas convertir du type d'élément Integer [] en int.

myArray a déjà été instancié et initialisé correctement dans un constructeur. Je sais que c'est correct car je peux très bien afficher les éléments du tableau au format liste, de 1 à 60.

    myArray = new Integer[6][10];

    for (int i = 0; i < myArray.length; i++) {
        for (int j = 0; j < myArray[i].length; j++) {
            this.myArray[i][j] = i + 1;

        }
    }
}

Ce à quoi je m'attendais, c'était de sortir la somme de tous les éléments du tableau. J'ai essayé exactement la même chose avec des boucles for régulières, et cela a parfaitement fonctionné. Malheureusement, lorsque je suis passé aux boucles for améliorées, cela a cessé de fonctionner, ce qui m'a donné l'erreur:

Incompatibilité de type: impossible de convertir le type d'élément Integer [] en int

Voici à quoi ressemble mon constructeur:

ExerciseTwo () {

public void displayArrayProduct() {

    DecimalFormat decimalFormat = new DecimalFormat("#.##");
    decimalFormat.setGroupingUsed(true);
    decimalFormat.setGroupingSize(3);

    int p=1;

    System.out.print("The product of all element of myArray is ");
    for (int a : myArray) {
        for (int b : myArray) {
             p = p + myArray[a][b];

        }
    }
    System.out.println(decimalFormat.format(p));
}

}


0 commentaires

5 Réponses :


0
votes

Mise à jour: Ma réponse d'origine a été publiée avant qu'il ne soit clair myArray est un tableau multidimensionnel. Compte tenu de cela, je suis d'accord avec Vecna ​​- qui a également souligné à juste titre que l'utilisation de la boucle for-each vous permettrait d'obtenir l'entier lui-même au lieu de le référencer par index.

Réponse originale: Il semble que vous ayez changé quelque chose d'autre lorsque vous avez converti les boucles for.

L'expression myArray [a] [b] serait valide si myArray était un tableau multidimensionnel. Le problème est que vous essayez d'accéder à un tableau bidimensionnel, alors que le tableau lui-même est unidimensionnel.

Si vous essayez de multiplier les entrées en a et b, vous devez faire ceci:

p += myArray[a] * myArray[b];

ou en abrégé:

p = p + myArray[a] * myArray[b];


0 commentaires

0
votes
for (int[] a : myArray) {
    for (int b : a) {
         p = p + b;

    }
}
Well the issue is a is an int array and not just an int.

0 commentaires

0
votes

Vous utilisez des pour-chaque boucles qui parcourent chaque élément d'un tableau ou collection. Ainsi, la chose que vous définissez dans la déclaration de boucle est un élément du tableau, plutôt qu'un index . Puisque vous utilisez un tableau à 2 dimensions (un tableau de tableaux), chaque élément de myArray est un tableau d'entiers, donc la première boucle doit être déclarée:

p = p + b;

Donc, chaque a valeur sera de type int [], et ce que vous voulez ensuite est d'obtenir chaque entier de chacun de ces tableaux d'entiers:

for (int b : a) {

Notez que vous obtenez chaque entier dans a, pas dans myArray. Vous pouvez maintenant référencer chaque entier du tableau comme étant simplement b, et non comme la valeur d'un tableau à l'index b:

for (int[] a : myArray) {


0 commentaires

0
votes

Il semble que myArray est un tableau de tableaux, pas un tableau d'entiers. C'est peut-être plus ce dont vous avez besoin?

    for (int[] a: myArray) {
        for (int b: a) {
            p = p + b;
        }
    }


4 commentaires

Peut-être que je me trompe et que je l'ai mal initialisé dans mon constructeur à ce moment-là.


J'ai ajouté mon code constructeur au bas de la question. Seriez-vous en mesure de l'examiner?


Ça semble bien. Cette ligne ici "myArray = new Integer [6] [10];" crée myArray sous la forme d'un tableau à deux dimensions, également appelé tableau de tableaux. Vous pouvez donc le considérer comme un tableau où chaque élément à l'intérieur est de type int [].


Puisque vous initialisez en utilisant "new Integer", vous devrez probablement changer la boucle for pour utiliser Integer [] au lieu de int []



0
votes

Vous avez mentionné que vous aviez 60 éléments dans votre tableau, j'ai donc simplement créé un exemple de tableau 2 x 30 à titre d'exemple:

1770

Ensuite, si vous utilisez une boucle for-each , votre erreur se produit parce que chaque ligne individuelle du tableau en tant qu'INDEX DANS ELLE-MÊME. Ainsi, votre boucle for-each doit représenter être du type (int []) un int Array:

for(int[] x: myArray) {
        for(int y: x) {
            totalVal += y;
        }
    }
System.out.println(totalVal);

Dans chaque Array individuel (x), il y a une valeur primitive int donc nous exécutons une autre boucle for-each-loop afin d'extraire chaque valeur individuelle:

for (int y: x) {

Et voici votre code complet:

XXX

Et la sortie est la somme de chaque int dans le tableau:

for(int[] x: myArray) {


0 commentaires