Terminating a Loop Prematurely: Break and Continue

As you may recall, a while loop will evaluate all its statements without checking the condition. Similarly a for loop will run through all of its iterations. The break keyword tells MATLAB® to exit the loop immediately. It will only terminate one loop (in the case of nested loop, the innermost one it is in) and will normally be protected by an if statement (otherwise the loop is silly). Here is an example that computes the "trajectory" of 6 but stops if it finds a 17 in it:

s=6;             % initialize s to 6
while s~=1       % as long as s is not equal to 1 stay in the loop
     if s==17    % if s equals 17
          sprintf('Found 17 in the loop!!')
          break;
     end
     if mod(s,2) % the actual "brains" of the iteration
          s=s/2;
     else
          s=3*s+1;   
     end
end

The keyword continue is similar but different. It avoids the rest of the statements of the inner most loop, but continues in the loop (does not stop like break).

Here's example code for a while loop that uses both break and continue to find the first 100 primes (not very efficiently, but it's only an example):

n=1;
m=0;

while 1      % this means that unless we use "break", the loop will continue "forever"
     n=n+1;  % increase n
     flag=0; % reset flag
     for i=2:ceil(sqrt(n)) % no need to check numbers greater than the square-root of n
          if mod(n,i)==0   % means that i divides n exactly
               flag = 1    % to know that we found a divisor
               break;      % no need to remain in the for loop
          end
     end
     if flag
          continue % to avoid the next line. It could have also been done
                   % differently with an "if" statement, but this can be more elegant
     end
     sprintf('%d is prime!\n',n) % this is quite an interesting command...
                                 % take some time to learn about it
     m=m+1;      % increment primes count
     if m>=100   % if we have enough
          break; % stop looking for primes
     end
end

Homework 6. The keywords break and continue are not "needed'' per se, but they can make the code more elegant and readable. Rewrite the above code for the first 100 primes without using neither continue nor break.

Homework 7. for loops and while loops are not inherently different:

  • The "input" of a for loop is a variable and a vector of values. Recreate the functionality of a for loop using a while loop.
  • The "input" of a while loop is the condition statement. Recreate the functionality of a while loop using a for loop. (Hint: when using the notation for i=1:n MATLAB does not actually create the vector 1:n. Internally it simply iterates over the values in that vector by incrementing i until it reaches n. This means that if you write for i=1:281474976710655 you'll get a loop that, on its own, will "never" terminate. Explanation: 281474976710655 is the largest integer that MATLAB can represent internally. It is such a large number that even if every pass through the loop only takes 1 millisecond getting through the loop will take about 10000 years.)