2
votes

Ignorer les nombres dans la boucle for

J'essaye de sauter des valeurs en utilisant une boucle for. Quelque chose comme

for (int i = 32; i <= 255 /* - but skip 128 to 159 */; i++) 
{
    char ascii = (char) i;
    System.out.println(ascii);
}

Des suggestions?


1 commentaires

Écrivez deux boucles.


5 Réponses :


8
votes
if(i >= 128 && i <= 159){
  // Will skip all these values.
  continue;
}
You can use the continue keyword within any loop in Java which will cause the control flow to jump back up to the immediate parent loop. So in your case, for all values of i between 128 and 159 the code block beneath will never be executed. Alternatively, if you don't like this solution then you could write two for loops and exclude the range between them, however this is arguably more simple to read and gives you more flexibility if you wish to skip multiple ranges or impose more specific conditions on when to skip values of i.

1 commentaires

Veuillez expliquer votre réponse au lieu de poster uniquement du code



6
votes

Si vous ne souhaitez pas diviser votre boucle en deux boucles (chacune avec sa propre plage), vous pouvez utiliser Streams:

IntStream.rangeClosed(32,255)
         .filter(i -> i < 128 || i > 159)
         .forEach(i -> System.out.println((char) i));


1 commentaires

Et encore 70 points de sangsue pendant qu'il y avait une dupe, j'espère que vous en êtes satisfait. Je m'attendrais à ce que les gens avec autant de représentants recherchent d'abord les dupes, au lieu de déclencher une publication heureuse.



1
votes

ajouter une instruction if:

for(int i = 32; i <= 255; i++) {
      if(i < 128 || i > 159){
        char ascii = (char) i;
        System.out.println(ascii);
      }
    }


1 commentaires

Tout comme la réponse d'Adam, cela n'explique pas ce qui est fait et pourquoi. Personnellement, je n'aime pas exécuter le code principal dans un autre bloc de code et if ... continue indique très clairement que certaines parties du code sont ignorées. Actuellement, vous avez une partie du bloc for juste derrière le bloc if qui est toujours en cours d'exécution, même s'il est actuellement vide.



1
votes

Il existe plusieurs solutions

1er vous pourriez créer 2 boucles (1 de 32 à 127 et une de 160 à 255)

-> C'est peut-être trop spécifique à votre cas p >

Deuxièmement, vous pouvez créer un tableau contenant les index sur lesquels vous souhaitez parcourir et ensuite vous pouvez faire une boucle sur le tableau

Troisièmement, vous pouvez utiliser le mot-clé continuer pour ignorer les non-sollicités itérations

 for(int i = 32; i <= 255; ++i){
   if(i>=128 && i <= 159) {
     continue;
   }
   // do your stuff
  }


1 commentaires

Créez des réponses séparées au lieu de faire cela. Actuellement, toutes les réponses sont une chacune; alors nous pouvons voter pour la solution que nous aimons, ce que nous ne pouvons pas pour votre réponse.



-1
votes

Ajoutez une condition avec le mot-clé "break" comme ceci:

for(int i = 32; i <= 255 - but skip 128 to 159; i++) 
{
    if(i>128 && i<159){
        break;
    }
    char ascii = (char) i;
    System.out.println(ascii);
}

Le mot-clé break passera par le tour de boucle actuel et passera au suivant


1 commentaires

Non, c'est continuer ...