10
votes

Redémarrez l'itération actuelle dans 'for' boucle Java

J'ai une boucle pour qui demande à l'utilisateur de saisir un numéro, puis fait quelque chose avec elle 10 fois

Je veux un chèque intégré à cela, si l'utilisateur entre une entrée non acceptée, la boucle doit redémarrer son itération actuelle

Par exemple, si l'utilisateur entre quelque chose qui ne va pas dans le tour 3, le tour 3 doit être redémarré.

Comment puis-je faire ça? Y a-t-il quelque chose comme une déclaration de Redo en Java?


3 commentaires

Ok, qu'est-ce que tu as essayé?


Allez-vous à la même école que ce gars ?


Utilisez un DO-WHI boucle, pas un pour boucle.


3 Réponses :


10
votes

quelque chose comme ça? XXX


6 commentaires

C'est ce que j'ai fait, je me demandais simplement s'il y avait une manière plus élégante.


@KillerPixler Oui, utilisez un DO-While BOOP au lieu de diminuer la valeur i .


Je pense que la modification de la valeur d'une variable de contrôle de boucle à l'intérieur de la boucle a tendance à être déroutant. Assez simple dans ce cas, mais dans une grande boucle, cela pourrait être non évident ce qui se passe. Je préfère la réponse postée par @ mik378: utilisez une boucle interne pour refaire à nouveau l'entrée jusqu'à la réception d'une entrée valide.


@Davecosta qui est absolument vrai pour les grandes boucles. Mais ne pensez-vous pas que c'est un peu cher d'avoir une boucle imbriquée?


@ CHAITANYA10 qui ne diminue pas du tout pour avoir ce type de boucle intérieure.


J'ai mis en œuvre la solution à l'aide d'un DO-TIM, mieux pour le lectures et la compréhension.



8
votes

Vous avez quelques choix ici.

continuer strong> La déclaration Continuer em> dans Java raconte une boucle de retourner à son point de départ. Si vous utilisez une boucle de boucle, cependant, cela continuera à la prochaine itération qui n'est probablement pas ce que vous voulez, cela fonctionne donc mieux avec une implémentation de boucle tandis que: p> xxx pré> décrément fort> Cette approche me semble moche, mais si vous souhaitez accomplir votre tâche en utilisant une boucle pour une boucle, vous pouvez simplement décrémenter le compteur dans votre boucle (essentiellement «Redo») lorsque vous détectez une mauvaise entrée. P>

for(int i = 0; i < 10; i++)
{
    String s = getUserInput();
    if(isInvalid(s))
    {
        i--;
        continue;
    }
}


0 commentaires

5
votes

préférez éviter de réaffecter la variable i , cela peut entraîner une confusion. xxx


0 commentaires