Reputation: 181
<?php
$VarC = 6;
$VarD = 2;
$ctA = 1;
$ctB = 2;
$VarAns = 0;
$VarAns = $ctA * ($ctB+$VarC) / $VarD;
do {
do {
$VarAns = $ctA * ($ctB+$VarC) / $VarD;
echo ("X = $ctA * ($ctB + 6) / 2 is equal to: $VarAns<br>");
$ctA = $ctA + 1;
} while ($ctA <= 10);
echo ("<br>");
$ctA = 1;
$ctB = $ctB + 2;
$VarAns = $ctA * ($ctB+$VarC) / $VarD;
echo ("X = $ctA * ($ctB + 6) / 2 is equal to: $VarAns<br>");
$ctA = $ctA + 1;
} while ($ctB <= 10);
?>
I get an extra line at the end that I should not get, any ideas? Im trying to print and stop when I reach 10, but it goes to 12!
I get
X = 1 * (2 + 6) / 2 is equal to: 4
X = 2 * (2 + 6) / 2 is equal to: 8
X = 3 * (2 + 6) / 2 is equal to: 12
X = 4 * (2 + 6) / 2 is equal to: 16
X = 5 * (2 + 6) / 2 is equal to: 20
X = 6 * (2 + 6) / 2 is equal to: 24
X = 7 * (2 + 6) / 2 is equal to: 28
X = 8 * (2 + 6) / 2 is equal to: 32
X = 9 * (2 + 6) / 2 is equal to: 36
X = 10 * (2 + 6) / 2 is equal to: 40
X = 1 * (4 + 6) / 2 is equal to: 5
X = 2 * (4 + 6) / 2 is equal to: 10
X = 3 * (4 + 6) / 2 is equal to: 15
X = 4 * (4 + 6) / 2 is equal to: 20
X = 5 * (4 + 6) / 2 is equal to: 25
X = 6 * (4 + 6) / 2 is equal to: 30
X = 7 * (4 + 6) / 2 is equal to: 35
X = 8 * (4 + 6) / 2 is equal to: 40
X = 9 * (4 + 6) / 2 is equal to: 45
X = 10 * (4 + 6) / 2 is equal to: 50
X = 1 * (6 + 6) / 2 is equal to: 6
X = 2 * (6 + 6) / 2 is equal to: 12
X = 3 * (6 + 6) / 2 is equal to: 18
X = 4 * (6 + 6) / 2 is equal to: 24
X = 5 * (6 + 6) / 2 is equal to: 30
X = 6 * (6 + 6) / 2 is equal to: 36
X = 7 * (6 + 6) / 2 is equal to: 42
X = 8 * (6 + 6) / 2 is equal to: 48
X = 9 * (6 + 6) / 2 is equal to: 54
X = 10 * (6 + 6) / 2 is equal to: 60
X = 1 * (8 + 6) / 2 is equal to: 7
X = 2 * (8 + 6) / 2 is equal to: 14
X = 3 * (8 + 6) / 2 is equal to: 21
X = 4 * (8 + 6) / 2 is equal to: 28
X = 5 * (8 + 6) / 2 is equal to: 35
X = 6 * (8 + 6) / 2 is equal to: 42
X = 7 * (8 + 6) / 2 is equal to: 49
X = 8 * (8 + 6) / 2 is equal to: 56
X = 9 * (8 + 6) / 2 is equal to: 63
X = 10 * (8 + 6) / 2 is equal to: 70
X = 1 * (12 + 6) / 2 is equal to: 9
The last line X = 1 * (12 + 6) / 2 is equal to: 9
should not be there
Upvotes: 0
Views: 108
Reputation: 11689
The problem is not the while loop, it is that your initial code doesn't work and you has used a trick.
The nested do/while produce 10 lines at first primary do/while loop, but only nine at following loops, so you have added an additional echo
before closing primary loop to “anticipate” next loop: this echo is performed even in the last loop, then the additional unexpected line.
Simply change $ctA = 1;
in $ctA = 0;
(in the loop) and remove the final echo
:
$VarC = 6;
$VarD = 2;
$ctA = 1;
$ctB = 2;
$VarAns = 0;
$VarAns = $ctA * ($ctB + $VarC) / $VarD;
do {
do {
$VarAns = $ctA * ($ctB + $VarC) / $VarD;
echo ("X = $ctA * ($ctB + 6) / 2 is equal to: $VarAns<br>\n");
$ctA = $ctA + 1;
} while ($ctA <= 10);
echo ("<br>\n");
$ctA = 0; // <----------------
$ctB = $ctB + 2;
$VarAns = $ctA * ($ctB + $VarC) / $VarD;
$ctA = $ctA + 1;
} while ($ctB <= 10);
Upvotes: 1
Reputation: 5262
Are you sure that it prints following lines?
X = 10 * (8 + 6) / 2 is equal to: 70
X = 1 * (12 + 6) / 2 is equal to: 9
Because your code should output:
X = 10 * (8 + 6) / 2 is equal to: 70
X = 1 * (10 + 6) / 2 is equal to: 8
X = 2 * (10 + 6) / 2 is equal to: 16
...
X = 10 * (10 + 6) / 2 is equal to: 80
X = 1 * (12 + 6) / 2 is equal to: 9
Look at condition when $ctA == 1
and $ctB == 8
. When execution enters:
do {
$VarAns = $ctA * ($ctB+$VarC) / $VarD;
echo ("X = $ctA * ($ctB + 6) / 2 is equal to: $VarAns<br>");
$ctA = $ctA + 1;
} while ($ctA <= 10);
It will print:
X = 1 * (8 + 6) / 2 is equal to: 7
...
X = 10 * (8 + 6) / 2 is equal to: 70
at last iteration of inner loop, $ctA == 10
, so after increase by 1, now $ctA == 11
, then it exits inner do .. while
. Next, it enters:
echo ("<br>");
$ctA = 1;
$ctB = $ctB + 2;
It prints another break line, reset $ctA value to 1. Increase $ctB by 2. So now $ctA == 1
and $ctB == 10
and it enters:
$VarAns = $ctA * ($ctB+$VarC) / $VarD;
echo ("X = $ctA * ($ctB + 6) / 2 is equal to: $VarAns<br>");
$ctA = $ctA + 1;
which prints:
X = 1 * (10 + 6) / 2 is equal to: 8
Next, it increase $ctA value by 1, so now $ctA == 2
and $ctB == 10
. So condition ($ctB <= 10)
becomes true and outer do .. while
is repeated once more. It then enters inner loop and prints:
X = 2 * (10 + 6) / 2 is equal to: 8
...
X = 10 * (10 + 6) / 2 is equal to: 80
It exits inner loop and print another break line and last output
X = 1 * (12 + 6) / 2 is equal to: 9
The problem is multiple call to this code:
echo ("X = $ctA * ($ctB + 6) / 2 is equal to: $VarAns<br>");
and not reset $ctA to 0.
Upvotes: 0