I am having trouble with getting why a part of code even runs:
private int m;
private int n;
public void f() {
    m = (m +2) % n;
    System.out.print(m+"\n");
}
public void g() {
    int i=0;
    m=0;
    n=8;
    while (i++<n) {
        System.out.print("i=" + i + " m=");
        f();
    }
}
If I run g(), I get the following printed out: 
i++=1 m=2
i++=2 m=4
i++=3 m=6
i++=4 m=0
i++=5 m=2
i++=6 m=4
i++=7 m=6
i++=8 m=0
As I understand it, the last line shouldn't appear. Why does f() get that last time?
When f() gets called the first time, i = 0 and there for i++ = 1. (so when I print i, it is already equal to 1).
When I call f() the second to last time, i = 6, and there for i++ = 7. That is the last entire which is < n ( n = 8 ).
Why does the function get again called, when i++ is already = 8? this really confuses me.
 
     
     
     
     
     
    