StepupPrograming 〜ループ文を学ぶ〜

イントロダクション

前回は、IF文を理解したと思います。不思議な設定は少し置いておきます。

このブログを読み進めていれば、以下のスキル(武器)を保有していると思います。

  1. JavaFXのラベルコントロール
  2. IF文の書き方を理解している
  3. Stringクラス(文字列)の記載、コントロール
  4. メソッドを作る(文字列を返却する)
  5. System.out.printlnメソッド

MAPを作る

そろそろ、それっぽいものを作りたいと思います。そのために新たな武器を取得してもらいます。

ループ(FOR)文を覚える

まずは、MAPとFOR文の関係がわからないと「やる気」が出ないと思います。参考に作成したものをみてください。詳しくはこちら

下のソースは、次のような処理を行っています。

  1. パネルのサイズをint型の配列で保持します。
  2. 使用する画像ファイル名を変数に保持(ここではgrass_light.pngのみ使用)
  3. GridPaneクラスで升目上にラベルを配置する準備
  4. GridPane#add()でラベルを追加
    ※createImageLbl()メソッドはファイル名を引数にしてImageLabelを返却します。具体的には、緑色のタイル(画像ファイル)を返却します。
grid.add(createImageLbl(lightGrass), 0, 1);

と書いているのは、「0行目の1カラム目にイメージ画像をセット」という意味になります。

<ソース>

// パネルサイズ
int[] size = {3, 5};
String lightGrass = "grass_light.png";
String deepGrass = "grass_deep.png";
String soilBasic = "soil_basic.png";
GridPane grid = new GridPane();
grid.add(createImageLbl(lightGrass), 0, 1);
grid.add(createImageLbl(lightGrass), 0, 2);
grid.add(createImageLbl(lightGrass), 0, 3);
grid.add(createImageLbl(lightGrass), 0, 4);
grid.add(createImageLbl(deepGrass), 1, 1);
grid.add(createImageLbl(deepGrass), 1, 2);
grid.add(createImageLbl(deepGrass), 1, 3);
grid.add(createImageLbl(deepGrass), 1, 4);
grid.add(createImageLbl(soilBasic), 2, 1);
grid.add(createImageLbl(lightGrass), 2, 2);
grid.add(createImageLbl(lightGrass), 2, 3);
grid.add(createImageLbl(lightGrass), 2, 4);
grid.add(createImageLbl(lightGrass), 3, 1);
grid.add(createImageLbl(soilBasic), 3, 2);
grid.add(createImageLbl(lightGrass), 3, 3);
grid.add(createImageLbl(lightGrass), 3, 4);
vBox.getChildren().add(grid);

なにやら同じようなコードが並んでいて使用するのがとても大変です。
これでは「武器」としてイマイチです。

そこでFOR文

下の行を繰り返して、「0,1」「0,2」「0,3」...とちまちまとコーディングしました。

grid.add(createImageLbl(lightGrass), 0, 1);

こんな感じで動きますが、如何せん汎用性に欠けていてまぁ使えないわけです。

FOR文を使うとこーなる

String lightGrass = "grass_light.png";
String deepGrass = "grass_deep.png";
String soilBasic = "soil_basic.png";
GridPane grid = new GridPane();
for (int i = 0; i < 4; i++) {
    grid.add(createImageLbl(lightGrass), 0, 1);
}
vBox.getChildren().add(grid);

これで緑の部分が1行分並びます。

FOR文の書き方

for (カウンター変数の初期化;論理式; 後処理)

【具体的なコード】

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

①「int i = 0」がカウンター変数の初期化になります。ループする度に後処理で「i」がカウントアップされます「i++」の処理です。

②1回ループすると論理式「i < 5」で、次のループを行うかどうか判定します。

③はじめのループでは「i = 0」なので「0 < 5」=TRUEですのでループが行われますが、「i = 5」になったら「5 < 5」=FALSEですのでループが行われません。

雑魚キャラが現れた!

おろ?なにが足りないのでしょうか?(不思議な設定をロード中です)

とりあえず言いたいことは20行くらいのコードが数行で片付きます。

(設定のロード完了)

たくのじ村では、ちょっと揉め事が起きていました。

「村人C」『中ボスを倒してもらうのに、こいつを渡そうと思ってたが〜のんに。。。だれら〜こんがーことやったのは?誰かなんとかしくんねぇかなぁ?』

「村人D」『俺じゃねーって!人のせいにすんなて〜』

「村人E」『いや、まずはこれをなんとしねぇば。。。あ、そこの人ちょっと頼みたい事がるんスけど。。。』

『組んであったFORが壊れているようで、こいつを直して頂きたいんす、いゃ自分はどーもよくわからないて。。。ギターなら弾けるんすけどね?』

今回のトラブル

上で紹介した、FOR文がうまく動いていません、本来ならば4x4のマスが並ぶはずですが、1行しか並んでいません。これをなんとか元に戻して頂きたいというわけです。

<ヒント>

現在は1行だけ並んでいますので、これを残り3行文を追加すればOKなのです。。。問題は「どーやるか?」です。

今回上に記載したコードはGitにコミットしてあるのでそれを直していただきたく。。。

でわでわ。。。

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す