J'ai une boucle dans laquelle je calcule une valeur et je l'ajoute à une liste. Alors, je fais quelque chose comme ça:Pourquoi une erreur "dupliquer la variable locale" s'affiche-t-elle?
x = getValue()
values.add(x)
while (true) {
x = getValue();
values.add(x)
}
Je trouve que cette approche ne fonctionne pas parce que j'ajoute la même instance à la liste. En plus de détails, dans chaque cycle de la boucle, je réattribue une nouvelle valeur au x
et ainsi je change les valeurs de tous les éléments qui ont déjà été ajoutés à la liste (donc à la fin j'obtiens une liste d'éléments identiques).
Pour résoudre ce problème, je l'ai fait ce qui suit:
x = getValue();
Integer[] valueToAdd = new Integer[n];
for (int i=0; i<n; i++) {
valueToAdd[i] = x[i];
}
while (true) {
x = getValue();
y = new Integer[n];
for (int i=0; i<n; i++) {
valueToAdd[i] = x[i];
}
values.add(valueToAdd)
}
De cette façon, je voulais créer une nouvelle instance à chaque fois que veulent ajouter une valeur à la liste. Mais cela ne fonctionne pas puisque j'obtiens une erreur de variable locale en double.
Il est également étrange pour moi que je n'ai pas cette erreur si je déclare la même variable plusieurs fois dans la boucle. Le problème n'apparaît que si je déclare d'abord une nouvelle variable en dehors de la boucle, puis également dans la boucle.
Est-il possible en Java de réutiliser le même nom pour différentes instances?
AJOUT Je dois clarifier certains problèmes. Je n'ai pas montré tout le code. J'ai la commande break
dans la boucle (quand une nouvelle valeur ne peut pas être générée, je quitte la boucle). x
et value
ont Integer[]
type.
2 AJOUTÉE Comme il a été mentionné que le problème peut être dans le getValue()
je dois en plus de détails ici. En fait, je n'ai pas getValue()
dans mon code (j'ai utilisé getValue()
ici pour rendre mon exemple plus court). Dans mon code, j'avais:
Integer[] x = new x[n];
while (true) {
for (int i=0; i<n; i++) {
x[i] = y[i];
}
values.add(x)
}
Et cela n'a pas fonctionné depuis dans ma liste values
j'avais des éléments identiques (et je sais que dans la boucle sur chaque cycle x
avait une nouvelle valeur).
AJOUTÉE 3
Why all elements of my list seems to be the same?
Quel est le type de 'x'? Comment se fait-il que ces boucles fonctionnent pour toujours? Quel est le * texte réel * de l'erreur que vous décrivez comme "une erreur de variable locale en double"? – EJP
@EJP, j'ai la commande break dans la boucle (quand une nouvelle valeur ne peut pas être générée, je quitte la boucle). x et value ont le type Integer []. – Roman
Cette question est * extrêmement * peu claire. Il ne semble pas non plus y avoir de véritable problème à résoudre, ni de véritable code ou message d'erreur. – Bombe