J'essaye de résoudre un problème avec un tableau de nombres et 3 boucles for en Java. Il s'agit de déterminer quels 3 nombres du tableau s'additionnent à une somme spécifique. Pour ce test, j'ai utilisé une somme de 9.
0 0 30 1 20 2 10 3 01 0 21 1 11 2 02 0 12 1 03 0 0
La bonne réponse est 3 3 3 mais cette sortie se lit comme suit:
int nums[] = {1, 3, 5, 7, 9, 11, 13, 15};
for (int i = 0; i <= 7; i++) {
for (int j = 0; j <= 7; j++)
for (int y = 0; y <= 7; y++)
if(nums[i] + nums[j] + nums[y] == 9)
System.out.print(i + " " + j + " " + y);
}
Je sais Je suis probablement en train d'imbriquer complètement les boucles for, mais je ne peux pas savoir où placer les blocs de code sans me débarrasser de l'une des variables dans la portée de l'instruction if. Merci pour toute aide.
3 Réponses :
La bonne réponse est 3 3 3 mais cette sortie se lit comme suit:
Non, la bonne réponse n'est certainement pas
3 3 3, donc si je ne me trompe pas, vous voulez trouver un triplet qui résume votre somme de test, qui dans ce cas est de 9, donc la bonne réponse est 1,3,5 Essayez ceci:for (int i = 0; i <= 7; i++) { for (int j = i + 1; j <= 7; j++) for (int y = j + 1; y <= 7; y++) if (nums[i] + nums[j] + nums[y] == 9) System.out.print(nums[i] + " " + nums[j] + " " + nums[y]); }Exemple d'exécution: https://ideone.com / 5UAuGv
Merci, cette réponse fonctionne également, et je n'ai pas compris ce que l'impression i j et y par eux-mêmes faisait au début et cela a beaucoup plus de sens
Quelques problèmes dans votre code
System.out.print (i + "" + j + "" + y); vous voulez plutôt imprimer les nombres. println pour tout imprimer sur une nouvelle ligne 1,3,5 Le code mis à jour sera alors
1 1 7 1 3 5 1 5 3 1 7 1 3 1 5 3 3 3 3 5 1 5 1 3 5 3 1 7 1 1
Le résultat sera
for (int i = 0; i <= 7; i++) {
for (int j = 0; j <= 7; j++)
for (int y = 0; y <= 7; y++)
if( nums[i] + nums[j] + nums[y] == 9)
//Print the numbers on newline
System.out.println(nums[i] + " " +nums[j] + " " + nums[y]);
}
Si la répétition est autorisé, alors les 3 boucles partiront de 0 et la réponse changera
1 3 5
La réponse sera alors
for (int i = 0; i <= 7; i++) {
for (int j = i+1; j <= 7; j++)
for (int y = j+1; y <= 7; y++)
if( nums[i] + nums[j] + nums[y] == 9)
//Print the numbers on newline
System.out.println(nums[i] + " " +nums[j] + " " + nums[y]);
}
Merci pour l'aide, j'aurais dû mentionner que j'avais l'intention de répéter les chiffres, mais je suppose que 1, 3, 5 était la réponse que je recherchais réellement, et cette première explication a fonctionné parfaitement!
Vous testez les mêmes valeurs plusieurs fois, c'est-à-dire que 1 + 1 + 7, 1 + 7 + 1, 7 + 1 + 1 sont tous testés. Utilisez for for (int j = i; j <= 7; j ++) et for (int y = j; y <= 7; y ++) . Notez qu'il existe plusieurs réponses, pas seulement 3 3 3, si vous autorisez l'utilisation de valeurs plusieurs fois .
Vous n'ajoutez pas d'espace à la fin donc les ensembles sont
0 0 3(1 + 1 + 7),0 1 2(1 + 3 + 5), etc. Tous ajoutent jusqu'à 9, donc c'est la sortie correcteLa bonne réponse n'est certainement pas 3 3 3, donc si je ne me trompe pas, vous voulez trouver un triplet qui résume à votre somme de test, qui dans ce cas est 9, donc la réponse correcte est
1,3,5 < / code>Et oui, pour commencer: utilisez println (), pour avoir des retours à la ligne entre vos différentes instructions d'impression. Aide à la lecture.
Faites en sorte que votre System.out.print utilise
nums [i], pas seulementi, etc.Avez-vous l'intention d'imprimer l'index ou les chiffres réels? Vous imprimez des index:
jplutôt quenum [j]par exemple. Êtes-vous autorisé à répéter? Sinon, vous devez vous en occuper dans les boucles for.Aussi: I, j, y? ;-) 'k' semble être un choix plus évident pour la variable de boucle la plus interne. Non pas que cela change la logique, mais un lecteur du code existant est enclin à penser "ok, pourquoi est-ce que 'y' est utilisé ici?".