# "For" loop not stopping when I want

**URL:** <https://discourse.processing.org/t/for-loop-not-stopping-when-i-want/25701>\
**Category:** Libraries\
**Created:** [November 25, 2020, 3:48pm UTC](https://discourse.processing.org/t/for-loop-not-stopping-when-i-want/25701 "2020-11-25T15:48:26Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Spomch](https://avatars.discourse-cdn.com/v4/letter/s/cdc98d/32.png) [@Spomch](https://discourse.processing.org/u/Spomch)\
**Post date:** [November 25, 2020, 3:48pm UTC](https://discourse.processing.org/t/for-loop-not-stopping-when-i-want/25701/1 "2020-11-25T15:48:26Z")

</div>

Hi everyone, I’m posting here because I’m facing a problem with a “for” loop.  
Here is the code that I am working on :

```auto

import processing.sound.*;
SoundFile Son;
PImage portrait;
PImage portrait_deux;
PImage telephone;
PImage mail;
PImage arme;
int rand;
int action;
int timer;
int avancement;
int state = 0;

void setup() {
  size(1920, 640);
  telephone = loadImage("Calls.jpg");
  mail = loadImage("Emails.jpg");
  arme = loadImage("Kills.jpg");
  rand = int(random(0, 155));
  timer = millis();
}

void draw() {

  for (int avancement = 0; avancement < 10; avancement++) {

    if (state == 0) {
      takerandomimage("portrait" + nf(rand, 3) + ".jpg");
      image (portrait, 0, 0);

      if (millis() - timer > 500) {
        state=1;
        timer=millis();
      }
    } else if (state == 1) {
      image (portrait, 0, 0);
      action = int (random (1, 3));

      if (action==1) {
        image (telephone, 0, 0);
        Son = new SoundFile(this, "Son_calls.mp3");
        Son.play();
      } else if (action==2) {
        image (mail, 0, 0);
        Son = new SoundFile(this, "Son_emails.mp3");
        Son.play();
      } else {
        println("Error: unknown action: " +action);
      }
      state = 2;
    } else if (state==2) {
      if (millis() - timer > 300) {
        state=3;
      }
    } else if (state == 3) {
      if (Son!=null) {
        if (!Son.isPlaying()) {
          rand = int(random(1, 155));
          state = 0;
          timer=millis();
        }
      } else {
        state = 0;
        timer=millis();
      }
    }
  }

  if (avancement == 10) {

    if (state == 0) { 
      takerandomimage("portrait" + nf(rand, 3) + ".jpg");
      image (portrait, 0, 0);
      if (millis() - timer > 500) {
        state=1;
        timer=millis();
      }
    } else if (state == 1) {
      image (portrait, 0, 0);
      image (arme, 640, 0);
      Son = new SoundFile(this, "Son_kills.mp3");
      Son.play();
      state = 2;
    } else if (state==2) {
      if (millis() - timer > 300) {
        state=3;
      }
    } else if (state == 3) {
      if (Son!=null) {
        if (!Son.isPlaying()) {
          rand = int(random(1, 155));
          state = 4;
          timer=millis();
        }
      } else if (state == 4) {
        takerandomimage("portrait_deux" + nf(rand, 3) + ".jpg");
        image (portrait_deux, 1280, 0);
        timer=millis();
      }
    }
  }
}

void takerandomimage(String fn) {
  portrait = loadImage(fn);
  image(portrait, 0, 0);
  portrait_deux = loadImage(fn);
  image(portrait_deux, 0, 0);
}

```

Here is the issue I’m having :  
The program runs without stopping although I would like it to stop once the variable “avancement” has reached the value of 10, so that I could run the final part of the code (from line 73 to 103).

In other words :

- While “avancement” \< 10
- Run the code from line 29 to 69
- When “avancement” = 10
- Run the code from line 73 to 103

Could someone please highlight the mistakes that I am making ? That would be really helpful.

I hope this makes sense, please tell me if there is something you don’t understand, or something that I forgot to mention.  
Anything would help, thank you very much !

---

<div class="post-metadata">

**Author:** ![Chrisir](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/chrisir/32/45_2.png) [@Chrisir](https://discourse.processing.org/u/Chrisir)\
**Post date:** [November 25, 2020, 4:26pm UTC](https://discourse.processing.org/t/for-loop-not-stopping-when-i-want/25701/2 "2020-11-25T16:26:13Z")

</div>

the state system relies on the fact that draw runs 60 times per second. So every line in the right state section is run 60 times in each second. That what state is for, that processing runs the right lines.

draw() doesn’t update the screen until its very end, so you can’t see anything that happens during for-loop, no animation, nothing.

**Anyway.**

kill the for loop

make a counter `avancement ` and increase it in the place in the code where you reset the state to 0 and then work with your if clause:

```auto
  if (avancement == 10) {

```

Surround the first entire if state construct with if (avancement \< 10) { … }
