一番かんたんなJava入門

これからJavaを始めようという人の為の超入門サイトです。丁寧、簡単にこだわった解説なので初心者にぴったりです。

【Java】 for文って何?

time 2013/03/09

sponsored link

繰り返しとは?

 今回はfor文についてです。前にif文というのをやりましたが、あれは条件分岐の構文でしたね。for文というのは繰り返しの構文です。

 for文がどんなものか理解してもらう為に、2の累乗を計算するプログラムを作ってみます。例えば、2の5乗だと、数式にすると1×2×2×2×2×2で32になりますね。2の累乗とは1に何回2を掛けるかってことですね。

この計算をプログラムにやってもらいましょう。int型変数answerを用意して、初めに1を代入してあります。そこに2を5回掛けます。

PowerOfTwo.java

public class PowerOfTwo{
     public static void main(String[] args){
          int answer = 1;

          answer = answer * 2;   //1回
          answer = answer * 2;   //2回
          answer = answer * 2;   //3回
          answer = answer * 2;   //4回
          answer = answer * 2;   //5回

          System.out.print("2の5乗は、");
          System.out.println(answer);
     }
}

 全く同じ文「answer = answer * 2;」がいっぱい並んでいますが、意味分かりますでしょうか?なんのこっちゃ分からない方は「=」と「*」の評価の順番を意識して(参考:演算子って何?)、変数answerの値がどう変わっていってるのか確認しながら、一行ずつ読んで下さい。

 5乗だとこれでOKです。実行すると、
power1

答えも合ってます。しかし、全く同じ文を続けて5回も書くのはプログラムとしてはちょっと不細工だし、面倒です。そこで、登場するのが、for文です。

for文を使えば「{answer = answer * 2;}を5回繰り返しなさい」と書くことが出来るんです。

for文の基本的な使い方

for(5){
     answer = answer * 2;
}

 これで、「answer = answer * 2;」 を5回繰り返してくれ・・たら楽なんですけど、繰り返し回数の定義はもうちょっと複雑です。「for( )」の「( )」の中に繰り返しの条件を書くのですが、単に何回繰り返すかの数字を入れるわけではありません。

まず「( )」の中を「;」で区切って3つのパート(初期設定、実行条件、継続処理)に分けます。

for文の基本構文

for( 初期設定 ; 実行条件 ; 継続処理 ){
     ブロック
}

 5回繰り返すにはどう書けばいいか、ゆっくりやっていきます。こんな丁寧に書いてるサイトないですよ~。(笑)
 まず初期設定のパート、

for( int i=0; 実行条件 ; 継続処理 ){
     answer = answer * 2;
}

 初期設定は「int i=0」です。繰り返し回数を数える為のint変数iを宣言して、そこに0を代入しています。繰り返しの一周目はカウント0からです。ここの変数名は別に何でもいいのですが、特に意味なくただのカウントとして使うのであれば普通は「i」を使うようです。

 続いて、実行条件のパート、

for( int i=0; i<5; 継続処理 ){
     answer = answer * 2;
}

実行条件は「i<5」です。この実行条件がtrueであればブロックの中が実行されます

初期設定ではiは0なので、「i<5」はtrueになりますね?というわけで1回目の「answer = answer * 2;」が実行されます。  続いて、継続処理のパート、

for( int i=0; i<5; i++ ){
     answer = answer * 2;
}

 継続処理というのは、ブロックの中を実行した後で処理される内容です。その処理をされてから次の周に進みます。

ここでは継続処理は「i++」です。これはインクリメントというやつで、「i = i+1」を略して書いたものです。変数の値を1増やしたい時に使います。

 つまり、ここでの継続処理は「iの値を1増やす」ということです。「answer = answer * 2;」を実行したら、iの値を1増やして2周目に突入です。最初iは0だったので1になったわけです。

 2周目以降は、初期設定はもう関係ありません。初期設定の出番は当然ですが最初だけです。

 で、2周目も実行条件のチェックです。さっきのインクリメントでiは1に変わっていますが、実行条件「i<5」はtrueですので、2周目の「answer = answer * 2;」実行です。  で、同じように「answer = answer * 2;」が実行し終わったら、継続処理「i++」でiが2になります。そして3周目・・、と続いて行きます。  5周目のブロックを実行した後の継続処理でiは5になります。すると次の6周目で実行条件「i<5」がfalseとなります。実行条件がfalseになればブロック内は実行されずにfor文を抜けます。 結果的に「answer = answer * 2;」を5回実行してfor文を抜けるわけです。  この形で書けば、実行条件パートの「i<5 」の数字の回数だけ繰り返しブロック内が実行されることになるんですね。勘のいい人はお分かりだと思いますが、5回実行させる為の書き方なんていくらでもあります。

for( int i=1; i<=5; i++ ){
     answer = answer * 2;
}

 これでもカウント1から始まって5で終わるので結局5回実行することになるし、感覚的にはこちらの方が分かりやすい気もしますが、普通に○回繰り返しというプログラムをする時は、カウント0から始めて実行条件式は「<=」ではなく「<」を使うのが一般的です。慣れてきたらいろんな繰り返し条件が書けるようになると思うので、とりあえずはこの基本の形を覚えたらいいと思います。

check point

  • for( 初期設定 ; 実行条件 ; 継続処理 ){ ブロック }
  • まず初期設定パートを実行
  • 実行条件式がtrueならばブロック内を実行
  • ブロック内を実行したら継続処理を実行し、実行条件式を評価
  • 実行条件式がfalseならブロック内を実行せずにfor文を抜ける
  • 例)5回繰り返し for(int i=0; i<5; i++){ ブロック }

2のn乗を計算

 では、さっきの「PowerOfTwo.java」をfor文を使ってスマートに書き換えましょう。

PowerOfTwo.java

public class PowerOfTwo{
     public static void main(String[] args){
          int answer = 1;

          for( int i=0; i<5; i++ ){ 
               answer = answer * 2; 
          } 

          System.out.print("2の5乗は、");
          System.out.println(answer);
     }
}

 これで2の5乗を計算してくれるプログラムはばっちりです。けど5乗しか計算できないんじゃあ面白くないので、このプログラムを、任意の整数nを与えたら2のn乗を計算できるように改造しましょう。

PowerOfTwo.java

public class PowerOfTwo{
     public static void main(String[] args){
          int n = 5;
          int answer = 1;

          for( int i=0; i<5; i++ ){ 
               answer = answer * 2; 
          } 

          System.out.print("2の5乗は、");
          System.out.println(answer);
     }
}

 例によって手打ち設定で申し訳ないのですが、「int n」を宣言してとりあえず5を代入しています。このnをどうするのかというと、そうです、賢明な読者様ならもうお分かりだと思います。

PowerOfTwo.java

public class PowerOfTwo{
     public static void main(String[] args){
          int n = 5;
          int answer = 1;

          for( int i=0; i<n; i++ ){ 
               answer = answer * 2; 
          } 

          System.out.print("2の" + n + "乗は、");
          System.out.println(answer);
     }
}

 これで2のn乗を計算してくれるプログラムの完成です。nの初期化部分を例によって手打ちで書き換えてもらえれば、10乗でも20乗でも一瞬のうちに計算して答えを吐き出してくれます。

 nの値を変えていくつか実行した結果を載せておきます。
power2
power3
power4
 ただし変数answerはint型なので2の31乗-1までしか入りませんので正確に計算できるのは30乗までです。ちなみに31乗で計算すると面白い答えがでます。コンピュータが、32bitのメモリ領域で(-2の31乗)から(2の31乗-1)の数値(int型)を保持している仕組みがちょっと分かります。(参考:基本データ型について

 次回はfor文で配列を回すというのをやります。配列とfor文を使いこなせれば本格的なプログラマーの仲間入り??

sponsored link

Androidアプリを作ろう

コメント

  • Nobuo様

    はじめまして。
    JAVAの入門者ですが、解説の理解できるサイトを探していたところ、こちらのサイトに辿り着きました。
    有難うございます!!

    できましたら、While文の解説と書き換えをご教示下さい。

    宜しくお願い致します。

    by miho €2014/12/07 00:04

  • コメントありがとうございます!

    >できましたら、While文の解説と書き換えをご教示下さい。

    ですね。while文や三項演算子もやりたいと思いながら出来ていません。(汗)
    また書けたら書きますので暖かく見守ってやってください。

    お役に立てて良かったです。^^

    by Nobuo@管理人 €2014/12/07 23:58

  • 返信頂き有難うございます!!

    また、こちらのサイトで学習を続けたいと思いますので、
    こちらこそ、宜しくお願い致します。

    by miho €2014/12/17 01:00

  • とてもわかりやすいです。
    ただ、一つだけ

    >iを1増やして2周目に突入です。

    これだとiが二つになると受け取る方もいるかもしれません。

    その後の

    >最初iは0だったので1になったわけです。

    この文章で分かると思うのであまり関係ないかもしれませんが
    気になったので報告しておきます

    by 匿名 €2015/03/19 23:20

  • ご指摘ありがとうございます。
    微妙に手直ししておきました。

    by Nobuo@管理人 €2015/03/20 09:08

down

コメントする



CAPTCHA


一番かんたんなJava入門

Androidアプリの作り方

忘備録

私の作ったAndroidアプリ

私の作ったWordPressテーマ

プロに教わるオンライン学習

管理人

Nobuo_CREATE

Nobuo_CREATE

WordPressテーマPrinciple、マテリアルを作ったり、Androidアプリを作ったり、Java入門サイトを作ったり、本を書いたりしています。どうぞよろしく。 [詳細]



sponsored link

オススメ書籍

[オススメpoint]

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

[オススメpoint]

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊!

只今、急拡大中

ゲームを作りたい人専門

個人フットサル予約サイト

ガチ専門

JavaからのRuby on Rails入門

JavaからのRuby on Rails入門