Pourquoi dois-je obtenir un double “variable locale” erreur?
J'ai une boucle dans laquelle je calculer une valeur et de l'ajouter à une liste. Donc, je fais quelque chose comme ça:
x = getValue()
values.add(x)
while (true) {
x = getValue();
values.add(x)
}
J'ai trouvé que cette approche ne fonctionne pas depuis que j'ai ajouter la même instance à la liste. Plus en détail, dans chaque cycle de la boucle, je ré-affecter une nouvelle valeur à la x
et faisant donc j'ai changer les valeurs de tous les éléments qui ont déjà été ajoutées à la liste (donc à la fin je obtenir une liste d'éléments identiques).
Pour résoudre ce problème j'ai fait la suivante:
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, j'ai voulu créer une nouvelle instance à chaque fois souhaitez ajouter une valeur à la liste. Mais il ne fonctionne pas puisque je obtenir un duplicata de variable locale d'erreur.
Il est aussi é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'apparait que si j'ai d'abord déclarer une nouvelle variable à l'extérieur de la boucle, et puis aussi dans la boucle.
Est-il un moyen en Java pour la ré-utiliser le même nom pour les différentes instances?
AJOUTÉ
J'ai besoin de clarifier certaines questions. Je n'ai pas de montrer tout le code. J'ai le break
de commande dans la boucle (quand une nouvelle valeur ne peut pas être générer, je sortie de la boucle). x
et value
ont Integer[]
type.
AJOUTÉ 2
Depuis qu'il a été mentionné que le problème peut être dans le getValue()
j'ai besoin de plus de détails ici. En fait je n'ai pas getValue()
dans mon code (j'ai utilisé getValue()
ici pour faire mon exemple plus courte). Dans mon code j'ai eu:
Integer[] x = new x[n];
while (true) {
for (int i=0; i<n; i++) {
x[i] = y[i];
}
values.add(x)
}
Et il ne fonctionne pas car dans mon values
liste, j'ai eu des éléments identiques (et je sais que dans la boucle sur chaque cycle x
avait une nouvelle valeur).
AJOUTÉ 3
Pourquoi tous les éléments de ma liste semble être le même?
- Quel est le type de "x"? Comment venir ces boucles courir pour toujours? Qu'est-ce que le texte de l'erreur que vous décrivez comme "un double de la variable locale erreur"?
- J'ai la commande break dans la boucle (quand une nouvelle valeur ne peut pas être générer, je sortie de la boucle). x et la valeur Integer[] type.
- Cette question est extrêmement floue. Il ne semble être un vrai problème à résoudre, ni est-il réellement de code ou de messages d'erreur.
- n'ont pas fourni le texte, ni aucun code qui présente un tel problème. @Bombe: exactement.
Vous devez vous connecter pour publier un commentaire.
Votre problème n'est pas ce que vous pensez qu'elle est. Par exemple, jetez un oeil à ce programme simple:
Il imprime les numéros de 0 à 9. C'est parce que java est passé par valeur (vérifiez ici). Vous n'êtes pas en passant la référence à x, vous passez la valeur de x (dans le
add
méthode).Donc, le problème réside dans le
getValue()
méthode, qui renvoie le même objet.Mise à jour: Maintenant, la question est plus de sens. Vous travaillez avec le même objet
x
à chaque fois, et juste changer son état. Afin de mettre des valeurs différentes, il suffit de déplacer la déclaration à l'intérieur de la boucle:Si vous en avez besoin à l'extérieur de la boucle, et bien tout simplement utiliser une autre variable. Il n'a pas à être nommé
x
. Puisque vous n'allez pas l'utiliser à l'intérieur de la boucle, de toute façon.x
est la référence pour la suite degetValue()
. Ou ai-je raté quelque chose?x
est une chaîne de caractères et dans mon casx
aInteger[]
type?getValue()
). Plus sur le problème que j'ai eu est donnée ici: stackoverflow.com/questions/4324754/...x
avant lawhile
boucle. C'est pourquoi j'ai besoin de le déclarer avant la boucle. Si j'essaie de le déclarer dans la boucle je reçois leduplicate local variable
problème.x
pour en générer un nouveau. Si j'utilise deux variables dans et hors de la boucle, que j'ai besoin d'utiliser des variables différentes en fonction de si je suis la première fois dans la boucle ou j'ai déjà fait un cycle. C'est pourquoi je n'ai pas envie d'avoir différentsx
(un à l'intérieur de la boucle et un autre pour l'extérieur de la boucle).