.net column
.NET開発者のためのブログメディア

Javaのfor文とは?Javaを基礎から学ぼう!

2020年07月03日


SE
Javaのfor文ってどのようなものなのですか?
PM
Javaで繰り返し処理を行いたい場合に使う基本のプログラムです。

Javaのfor文とは

Javaにおいて繰り返し処理を行いたい場合は、for文を使用します。for文は、Java以外の多くのプログラム言語でも使用できるプログラムの基礎中の基礎です。それではまず簡単なサンプルを実行してみましょう。

public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.println(i+”回目です。”);
}
}

これを実行すると、以下のように表示されます。

0回目です。
1回目です。
2回目です。

for文の基本

for文の()の中は2つの;で区切られており3つに分けられています。ここではその3つを

for(初期処理 ; 継続判定処理 ; 変更処理)

と呼びましょう。初期処理で変数を初期化し、継続判定処理で式が成立する場合に継続し、変更処理では変数の加減などを行います。上のサンプルのfor文は、

for(まずiに0を入れる ; iが3未満なら継続する ; iを1加算する)

という意味になります。iが加算されて3に達したのでfor文から抜けたということですね。

for文の応用

例えば、iが0からでなくて1から始めたい場合は

for (int i = 1; i <= 3; i++) {

とすれば、iが1~3の間だけ続けられるので、

1回目です。
2回目です。
3回目です。

という結果になります。逆順で表示したいならば、iを減算します。

for (int i = 3; i > 0; i–) {

とすることで、

3回目です。
2回目です。
1回目です。

という結果になります。奇数だけ表示したいのであれば、iを2ずつ加算します。

for (int i = 1; i < 6; i+=2) {

とすれば、以下のように表示されます。

1回目です。
3回目です。
5回目です。

for文の二重ループ

for文は以下のように入れ子にして二重にすることができます。

for (int i = 1; i <= 2; i++) {
for (int j = 1; j <= 2; j++) {
System.out.println(“iとjをかけると”+i*j);
}
}

結果は以下になります。

iとjをかけると1
iとjをかけると2
iとjをかけると2
iとjをかけると4

2重でなく3重、4重にもできます。そういった状態をネストと言いますが、ネストが深くなるとわかりにくいプログラムになるので避けましょう。

for文の中でさらにfor文を記述する場合、別のメソッドにして呼び出すようにする方が、読みやすいプログラムになります。

for文を抜ける方法

ある条件でfor文を途中で抜けるには、どうしたらよいのでしょうか。それには、以下のようにbreakを使用します。

for (int i = 0; i < 3; i++) {
if (i==2) break;
System.out.println(i+”回目です。”);
}
System.out.println(“ループを抜けました。”);

iが2の時に抜けるので、結果は、

0回目です。
1回目です。
ループを抜けました。

となります。また以下のようにreturnでも抜けることができます。

for (int i = 0; i < 3; i++) {
if (i==2) return;
System.out.println(i+”回目です。”);
}

結果は、

0回目です。
1回目です。

となります。なおreturnを使った場合はループから抜けるだけでなく、そのメソッドから抜けてしまいます。なので、この場合は「ループを抜けました。」が表示されません。

for文の処理をスキップする方法

for文の途中で処理を飛ばし、次のターンにしたい時はどうすればいいのでしょうか。それには、以下のようにcontinueを使います。

for (int i = 0; i < 3; i++) {
System.out.println(i+”回目スタート。”);
if (i==1) continue;
System.out.println(i+”回目エンド。”);
}

結果は以下になります。

0回目スタート。
0回目エンド。
1回目スタート。
2回目スタート。
2回目エンド。

iが1の時に残りの処理を飛ばして、iが2の処理に遷移したということですね。continueは、意外と役に立つことが多いので活用しましょう。

for文の省略表記

for文の()の中の3つの処理は、それぞれ省略することも可能です。例えば初期処理を省略し、

int i = 0;
for (; i < 3; i++) {

と記述することもできます。さらに変更処理も省略して、

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

としても同じになります。また、継続判定処理を省略して、

int i = 0;
for (;;) {
i++;
if (i==2) break;
}

としても同じです。ただし継続判定を省略した場合、途中で必ずbreakかreturnで抜ける必要があります。

そうしないと、無限ループになってしまい、深刻なバグの原因となる可能性があります。なので、継続判定は省略しない方が良いでしょう。

for文に似ているwhile文

for文に似た機能でwhile文があります。以下がその例です。

int i = 0;
while (i < 3) { System.out.println(i+"回目です。"); i++; } 結果は以下になります。whlileの()の式が成立している間、ループ処理を行っています。 0回目です。 1回目です。 2回目です。 また、以下のように記述しても同じ結果になります。この場合は、breakがなかったら抜けることができず、無限ループになります。 int i = 0; while (true) { System.out.println(i+"回目です。"); if (++i==3) break; } while文はJava以外の多くの言語にもある機能で、このようにwhile(true)で使われることが多かったため、breakを忘れてしまい無限ループのバグを多く引き起こしてきました。そのため、職場ではコーディングルールでwhileの使用を禁止にする場合もあります。 while文で出来ることは、全てfor文でも可能です。while文は知識として知っているが、使用は控えるという方が良いでしょう。

拡張for文とは

Javaには、拡張のfor文という便利な機能があります。まず以下を見てください。

String strary[] = { “太郎”, “花子”, “一郎” };

for (int i = 0; i < strary.length; i++) { System.out.println(strary[i]); } 配列の文字列を表示するプログラムになります。結果は以下のようになります。 太郎 花子 一郎 拡張for文を使うと、上のようなfor文を以下のように簡潔に記述できます。 for (String str : strary) { System.out.println(str); } 拡張for文の文法は以下の通りで、コレクションに対して1つずつ全て取り出し、何かをおこなう処理を、拡張for文の文法を使うことで簡潔に記述できるでしょう。 for ( 取り出す型 取り出す変数 : コレクション) コレクションは配列だけでなく、List型やMap型も使用できます。拡張for文でスマートなJavaプログラミングをしましょう。

Java 8のforEachメソッド

Javaのバージョン8からラムダ式が導入されました。List型などのコレクションに、forEachというメソッドが追加されて、上のような処理をさらに簡潔に記述できます。まず、ソースの先頭に以下のimportを追加します。

import java.util.Arrays;
import java.util.List;

そしてmainメソッドに以下を記述します。forEach()の()内がラムダ式です。

List<String> list = Arrays.asList(“太郎”, “花子”, “一郎”);
list.forEach(str -> System.out.println(str));

この2行だけで、上の拡張for文のサンプルと同じことが出来てしまうのです。Java8を使う機会があれば、是非活用をしましょう。ラムダ式については、ここで説明するとfor文の説明から離れるので今回は省略します。興味があれば調べてみてください。

SE
for文を使えば、作業を短縮させることが出来るのですね。
PM
Javaだけでなく、どのプログラミング言語でも使えるので、覚えておくときっと役に立つでしょう。

Javaのfor文を使ってみよう

Javaのfor文を解説しましたが、いかがでしたでしょうか。for文はJ、avaだけでなくほとんどの言語にある機能なので、マスターすれば他の言語を使うときでも役立つでしょう。

Javaを勉強し始めたばかりという人は、この記事を参考にfor文の学習から始めてみてはいかがでしょうか。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags

Jobs