人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP言語初心者です。どうぞよろしくお願い申し上げます。OSはmac os x 10.4.11です。

<pre>
<?php
$i = 1;
$sum = 0;

while($sum <= 10)
{
$sum = $sum + $i;
$i++;
echo "sum=".$sum."?n";
echo "i = ".$i."?n";
}
?>

</pre>

上記のコードを実行すると、
sum=1
i = 2
sum=3
i = 3
sum=6
i = 4
sum=10
i = 5
sum=15
i = 6

と表示されてしまい、$sum <= 10を満たしてくれません。

ところが、


<pre>
<?php
$i = 1;
$sum = 0;

while($sum >= 10)
{
$sum = $sum + $i;
$i++;
echo "sum=".$sum."?n";
echo "i = ".$i."?n";
}
?>

</pre>

を実行すると、何も表示されません。
なぜなのでしょうか?
できるだけ、分かりやすい説明でお願い申し上げます。
どうぞよろしくお願い申し上げます。

●質問者: gbs01
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:echo Mac OS X OS PHP コード
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●42ポイント ベストアンサー

まず、ご質問の1番目のプログラムが、$sum <= 10を満たさないという件について――。

while ループは、その条件が書かれている位置を評価します。

ところが、echo で $sum の値を表示する前に $sum に対して演算を行っていますから、while 条件式の位置における $sum の値と、echo の位置における $sum の値が変わってしまいます。

これを表で表すと以下のようになります。while条件式は正しく働いており、6回目のループに入る前に while 条件式でループが終了するのです。

ループ回数 while の位置における $sumの値 echo の位置における $sum の値
1回目 0 1
2回目 1 3
3回目 3 6
4回目 6 10
5回目 10 15
6回目 15 21


次に、2番目のプログラムが、なぜ何も表示しないのかについて――。

while ループに入る前に $sum = 0 としています。したがって、最初に while ループの条件である $sum >= 10 の評価が FALSE になり、一度もループの中に入ることはありません。

ですから、一度も echo が実行されないのです。


それでは、どうすれば望ましいループ終了条件式になるかというと、下記のように、条件判断式の中に算術演算を加えるといいでしょう。

<?php
$i = 1;
$sum = 0;

while (($sum = $sum + $i) <= 10) {
 $i++;
 echo "sum=".$sum."?n";
 echo "i = ".$i."?n";
}
?>
◎質問者からの返答

なるほど。

ありがとうございます。

とても助かりました。


2 ● きゃづみぃ
●28ポイント

whileは ループに入る前にチェックします。

なので最初のは

sum=10

i = 5

でループに入ったので ちゃんと $sum <= 10を満たして実行されています。

そのあと

$sum = $sum + $i;

$i++;

としたので

sum=15

i = 6

を表示したのです。


二番目のは

最初から $sum >= 10を満たしていないので

ループ内の処理はされません。

◎質問者からの返答

なるほど。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ