# Power Using a for Loop

Soon it will be possible to compile and run Mint programs in
DrJava. I just haven’t had time to finish this. In the meantime, here is a program that you can analyze. It is another program that calculates the power `x^n`.

 123456789101112131415 import edu.rice.cs.mint.runtime.Code; public class Power_For {    public static void main(String[] args) {        final double x = 2;        int n = 17;        Code c = <| 1.0 |>;        for(int i=0; i<n; ++i) {            c = <| `c * x |>;        }        System.out.println(c.run());    } }

This time it uses a for loop. I don’t know if you have seen for loops, but the part

`       for(int i=0; i<17; ++i) { /* something here */ }`

sets a variable `i` to `0`, and repeats the part `/* something here \*/` as long as `i<n`. Each time the loop is done with `/* something here */`, it will execute `++i`, which will increase `i` by `1`. So eventually `i` will be `17`, and since `n` is `17`, `i` is not `< n` anymore, and the loop exits.

We have a `Code<Double> c` that starts out with the code for `1.0`:

`       Code<Double> c = <| 1.0 |>;`

Then we have the aforementioned for loop. The code that gets executed
over and over in the loop body is

`           c = <| `c * x |>;`

We are creating a new code value, and inside the code value, we’re splicing in `c` (initially `1.0`) and multiplying it with `x`. Then we assign the new code value back to `c`. That means after the first
iteration of the loop, `c` will be the following:

`           <| 1.0 * x |>`

After the second iteration, `c` will be

`           <| 1.0 * x * x |>`

And so on. After the 17th iteration, it will contain the code

```           <| 1.0 * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x |>```

When we run `c` with `c.run()` and print out the value, we will get `131072.0`, which is 2 to the power of 17, as expected.