2010-07-24 6 views
1

J'ai un programme en R où j'utilise faire en boucle dans le format suivantDo while en R

for(i in 1:n) 
{ 
    repeat 
    { 
     #code 
     if(condition){break} 
    } 
} 

J'ai un problème, même si la condition de l'instruction if est vrai que la boucle est été exécuté still.Can quelqu'un me aider avec ce

Merci

+0

La boucle devrait fonctionner. Vous avez un bug ailleurs dans votre code. –

Répondre

1

Êtes-vous absolument certain que la condition est de dire ce que vous pensez qu'il est?

Et aussi, la rupture ne vous fait sortir de la déclaration "repeat", vous serez toujours à l'intérieur de la boucle for.

+0

Je suis d'accord. La condition doit être rencontrée 'n' fois pour quitter la boucle externe. –

0

Je n'ai pas d'expérience sur votre langue mais il me semble que vous utilisez pour la boucle imbriquée l'une est pour la boucle une autre est la répétition pour l'intérieur de loop.If alors ma suggestion est Vous pouvez utiliser une boucle avec déclaration break. Si vous voulez vraiment utiliser les deux boucles, vous devez utiliser l'instruction goto pour sortir de la boucle for.

for(i in 1:n) 
{ 
    #code 
    if(condition){break} 

} 

repeat 
{ 
    #code 
    if(condition){break} 
} 

Vous pouvez également utiliser

for(i in 1:n) 
{ 
    repeat 
    { 
     #code 
     if(condition){goto label;} 
    } 
} 

label: 

S'il vous plaît regarder la syntaxe de GOTO de votre langue, je ne sais pas si votre langue prend en charge GOTO ou non. Mais vous pouvez gérer de cette façon.

Merci

+2

Dieu merci R ne supporte pas gotoes (http://xkcd.com/292/). – mbq

1

La structure de votre code est un peu étrange ... pourquoi avez-vous la boucle for si vous ne voulez pas faire une boucle à travers elle?

Dans votre code i sera attribué 1 alors la boucle repeat commencera jusqu'à ce que la condition est remplie et vous break hors de lui. Ensuite i seront affectés 2 et la boucle repeat sera réexécuté etc.

Si vous voulez que le break pour sortir de la boucle for cela signifie que vous n'avez pas besoin de la boucle for du tout!

Quoi qu'il en soit, la façon de le faire serait:

flag = 0 
for(i in 1:n) 
{ 
if (flag == 1) 
    break; 

    repeat 
    { 
     #code 
     if (condition) 
      { 
      flag <- 1 
      break 
      } 
    } 
} 

Bien que cela ne ferait pas de sens que si vous avez plusieurs conditions différentes pour sortir de la boucle repeat, dont certains ne définissez pas flag<-1

0

Etes-vous sûr d'avoir besoin des deux structures de contrôle ci-dessous?

for(i in 1:n) 

et

if(condition){break} 

La seconde de celles-ci pourraient facilement être remplacés par une commande while(). Vous pouvez inclure à la fois la condition if et la condition i < = n dans la boucle while.