for
日本語 | ~のあいだ |
英語 | for |
ふりがな | ふぉー |
フリガナ | フォー |
一定回数の繰り返しを行うための予約語。
forステートメントで使用する。
繰り返し処理、つまり「ループ」を行うための予約語。
「for( 初期化; 評価式; 更新 ){ 繰り返し行う処理 }」という書式で「繰り返し行う処理」を複数回実行することができる。
詳しい書式については「forステートメント」の項目を参照。
また、J2SE 5.0から「拡張for」という、配列やコレクションの走査に特化した構文が追加された。こちらについては「拡張for」の項目を参照のこと。
forはまず「初期化」を実行する。
通常、ここでは「カウンター」に当たる変数宣言を行い、変数の宣言及び初期化を行う。
次に「評価式」を実行する。
この「評価式」内の処理は必ずboolean型の結果を戻り値として返す必要があるため、==演算子といった評価を行う演算子や、boolean型の戻り値を持つメソッドの呼び出しを記述する。
通常、この「評価式」では「初期化」で初期化したカウンターの値が「繰り返し回数」未満かどうかチェックする。つまり「カウンター < 繰り返し回数」と記述する。
「評価式」内の式から返された値がtrueの場合、「繰り返し行う処理」、つまりfor直後のブロック内が実行される。
falseの場合、ブロックへは入らず、その次の処理へと移る。
「評価式」の結果がtrueでありブロック内が処理されると、今度は「更新」が実行される。
通常、「更新」ではカウンターの値を1増やす(インクリメントする)。
「更新」後、再び「評価式」が処理される。
カウンターが「更新」で増やされ、それが「評価式」で「繰り返し回数未満」かどうかチェックされ、繰り返し回数未満であれば再びブロック内が処理され、超えていればブロック内を処理せず次の処理へと移る、つまり「forループから抜ける」ことになる。
流れとしては「初期化」→「評価式」→「繰り返し行う処理」→「更新」→「評価式」→「繰り返し行う処理」→「評価式」→...→「評価式」→「繰り返し行う処理」→「更新」→「評価式」という
順番となる。
上記の説明で「通常」と記述した例は、forを使用する上での「よく使われるパターン」である。
「for( int iF1 = 0; iF1 < 繰り返し回数; ++iF1 ){ 繰り返し行う処理 }」をパターンとして使用するのがいいだろう。
この「通常」でない方法で使用することも可能である。
たとえば、イテレーターを使用する場合には「評価式」ではhasNext()メソッドを呼び出し、「更新」は空にし、ブロックの先頭でnext()メソッドを呼び出し要素を取り出す。
ただし、このイテレーターの使用例も「よく使われるパターン」がありそれを使用することが多い。
forは自由度が高いため様々な記述方法ができるが、そういった「イレギュラーな使用方法」はプログラムの理解を難しくするため可読性が低くなる。
たとえば、forは上記の例で言うところの「カウンター」が、ブロック内で増減するような処理には向いていない。forはあくまで「一定回数」の繰り返し処理を行うためのものであり、回数が不定の場合にはwhileを使用した方が良い。
forステートメントで使用する。
繰り返し処理、つまり「ループ」を行うための予約語。
「for( 初期化; 評価式; 更新 ){ 繰り返し行う処理 }」という書式で「繰り返し行う処理」を複数回実行することができる。
詳しい書式については「forステートメント」の項目を参照。
また、J2SE 5.0から「拡張for」という、配列やコレクションの走査に特化した構文が追加された。こちらについては「拡張for」の項目を参照のこと。
forはまず「初期化」を実行する。
通常、ここでは「カウンター」に当たる変数宣言を行い、変数の宣言及び初期化を行う。
次に「評価式」を実行する。
この「評価式」内の処理は必ずboolean型の結果を戻り値として返す必要があるため、==演算子といった評価を行う演算子や、boolean型の戻り値を持つメソッドの呼び出しを記述する。
通常、この「評価式」では「初期化」で初期化したカウンターの値が「繰り返し回数」未満かどうかチェックする。つまり「カウンター < 繰り返し回数」と記述する。
「評価式」内の式から返された値がtrueの場合、「繰り返し行う処理」、つまりfor直後のブロック内が実行される。
falseの場合、ブロックへは入らず、その次の処理へと移る。
「評価式」の結果がtrueでありブロック内が処理されると、今度は「更新」が実行される。
通常、「更新」ではカウンターの値を1増やす(インクリメントする)。
「更新」後、再び「評価式」が処理される。
カウンターが「更新」で増やされ、それが「評価式」で「繰り返し回数未満」かどうかチェックされ、繰り返し回数未満であれば再びブロック内が処理され、超えていればブロック内を処理せず次の処理へと移る、つまり「forループから抜ける」ことになる。
流れとしては「初期化」→「評価式」→「繰り返し行う処理」→「更新」→「評価式」→「繰り返し行う処理」→「評価式」→...→「評価式」→「繰り返し行う処理」→「更新」→「評価式」という
順番となる。
上記の説明で「通常」と記述した例は、forを使用する上での「よく使われるパターン」である。
「for( int iF1 = 0; iF1 < 繰り返し回数; ++iF1 ){ 繰り返し行う処理 }」をパターンとして使用するのがいいだろう。
この「通常」でない方法で使用することも可能である。
たとえば、イテレーターを使用する場合には「評価式」ではhasNext()メソッドを呼び出し、「更新」は空にし、ブロックの先頭でnext()メソッドを呼び出し要素を取り出す。
ただし、このイテレーターの使用例も「よく使われるパターン」がありそれを使用することが多い。
forは自由度が高いため様々な記述方法ができるが、そういった「イレギュラーな使用方法」はプログラムの理解を難しくするため可読性が低くなる。
たとえば、forは上記の例で言うところの「カウンター」が、ブロック内で増減するような処理には向いていない。forはあくまで「一定回数」の繰り返し処理を行うためのものであり、回数が不定の場合にはwhileを使用した方が良い。
参考サイト
// Sample.java
import java.util.ArrayList;
import java.util.Iterator;
public class Sample
{
public static void main( String[] args )
{
// forを使って3回同じ処理をします。
for( int iF1 = 0; iF1 < 3; iF1++ )
{
// この中に記述した処理が、「繰り返し行う処理」です。
// この例ではiF1を出力しています。
System.out.println( iF1 );
}
// 0
// 1
// 2
// これが基本的な「一定回数繰り返し」のパターンです。
// 「3」の所を「繰り返す回数」に置き換えればいいだけなので簡単です。
// イテレーターでの使用例。
ArrayList arylst = new ArrayList();
arylst.add( new Integer( 100 ) );
arylst.add( new Integer( 200 ) );
arylst.add( new Integer( 300 ) );
for( Iterator iter = arylst.iterator(); iter.hasNext(); )
{
Integer integer = (Integer)iter.next();
System.out.println( integer );
}
// 100
// 200
// 300
// これが基本的な「イテレーター」のパターンです。
// ブロックの最初で行っている変数の宣言と、
// キャストするクラスだけ修正すればいいだけなので簡単です。
// for( 初期化; 評価式; 更新 )の初期化・評価式・更新が
// どのように呼ばれるのか試してみます。
ForFor forFor = new ForFor();
for( forFor.init(); forFor.isMax() == false; forFor.next() )
{
System.out.println( forFor.getCounter() );
}
// ForFor#init()
// ForFor#isMax()
// 0
// ForFor#next()
// ForFor#isMax()
// 1
// ForFor#next()
// ForFor#isMax()
// 2
// ForFor#next()
// ForFor#isMax()
// このように、まず「初期化」が処理され、次に「評価式」が評価されます。
// 「評価式」がtrueの場合、ブロック内が処理されます。
// 1周して戻ってきたら、「更新」を処理した後、再び「評価式」を評価します。
// これを繰り返し、「評価式」がfalseの場合に、ブロックを処理せず
// ブロックの次へと処理が移ります。
}
}
/**
* テスト用ForForクラス。
*/
class ForFor
{
// カウンター。
private int counter = 0;
/**
* 「初期化」時に呼び出すメソッド。
*/
public void init()
{
System.out.println( "ForFor#init()" );
counter = 0;
}
/**
* 「評価式」時に呼び出すメソッド。
* counterが3未満であればfalse、それ以外はtrueを返します。
*/
public boolean isMax()
{
System.out.println( "ForFor#isMax()" );
if( counter < 3 )
{
return false;
}
return true;
}
/**
* 「更新」時に呼び出すメソッド。
* カウンターを1増やします。
*/
public void next()
{
System.out.println( "ForFor#next()" );
++counter;
}
/**
* カウンターを取得するメソッド。
*/
public int getCounter()
{
return counter;
}
}
import java.util.ArrayList;
import java.util.Iterator;
public class Sample
{
public static void main( String[] args )
{
// forを使って3回同じ処理をします。
for( int iF1 = 0; iF1 < 3; iF1++ )
{
// この中に記述した処理が、「繰り返し行う処理」です。
// この例ではiF1を出力しています。
System.out.println( iF1 );
}
// 0
// 1
// 2
// これが基本的な「一定回数繰り返し」のパターンです。
// 「3」の所を「繰り返す回数」に置き換えればいいだけなので簡単です。
// イテレーターでの使用例。
ArrayList arylst = new ArrayList();
arylst.add( new Integer( 100 ) );
arylst.add( new Integer( 200 ) );
arylst.add( new Integer( 300 ) );
for( Iterator iter = arylst.iterator(); iter.hasNext(); )
{
Integer integer = (Integer)iter.next();
System.out.println( integer );
}
// 100
// 200
// 300
// これが基本的な「イテレーター」のパターンです。
// ブロックの最初で行っている変数の宣言と、
// キャストするクラスだけ修正すればいいだけなので簡単です。
// for( 初期化; 評価式; 更新 )の初期化・評価式・更新が
// どのように呼ばれるのか試してみます。
ForFor forFor = new ForFor();
for( forFor.init(); forFor.isMax() == false; forFor.next() )
{
System.out.println( forFor.getCounter() );
}
// ForFor#init()
// ForFor#isMax()
// 0
// ForFor#next()
// ForFor#isMax()
// 1
// ForFor#next()
// ForFor#isMax()
// 2
// ForFor#next()
// ForFor#isMax()
// このように、まず「初期化」が処理され、次に「評価式」が評価されます。
// 「評価式」がtrueの場合、ブロック内が処理されます。
// 1周して戻ってきたら、「更新」を処理した後、再び「評価式」を評価します。
// これを繰り返し、「評価式」がfalseの場合に、ブロックを処理せず
// ブロックの次へと処理が移ります。
}
}
/**
* テスト用ForForクラス。
*/
class ForFor
{
// カウンター。
private int counter = 0;
/**
* 「初期化」時に呼び出すメソッド。
*/
public void init()
{
System.out.println( "ForFor#init()" );
counter = 0;
}
/**
* 「評価式」時に呼び出すメソッド。
* counterが3未満であればfalse、それ以外はtrueを返します。
*/
public boolean isMax()
{
System.out.println( "ForFor#isMax()" );
if( counter < 3 )
{
return false;
}
return true;
}
/**
* 「更新」時に呼び出すメソッド。
* カウンターを1増やします。
*/
public void next()
{
System.out.println( "ForFor#next()" );
++counter;
}
/**
* カウンターを取得するメソッド。
*/
public int getCounter()
{
return counter;
}
}
// Sample.java import java.util.ArrayList; import java.util.Iterator; public class Sample { public static void main( String[] args ) { // forを使って3回同じ処理をします。 for( int iF1 = 0; iF1 < 3; iF1++ ) { // この中に記述した処理が、「繰り返し行う処理」です。 // この例ではiF1を出力しています。 System.out.println( iF1 ); } // 0 // 1 // 2 // これが基本的な「一定回数繰り返し」のパターンです。 // 「3」の所を「繰り返す回数」に置き換えればいいだけなので簡単です。 // イテレーターでの使用例。 ArrayList arylst = new ArrayList(); arylst.add( new Integer( 100 ) ); arylst.add( new Integer( 200 ) ); arylst.add( new Integer( 300 ) ); for( Iterator iter = arylst.iterator(); iter.hasNext(); ) { Integer integer = (Integer)iter.next(); System.out.println( integer ); } // 100 // 200 // 300 // これが基本的な「イテレーター」のパターンです。 // ブロックの最初で行っている変数の宣言と、 // キャストするクラスだけ修正すればいいだけなので簡単です。 // for( 初期化; 評価式; 更新 )の初期化・評価式・更新が // どのように呼ばれるのか試してみます。 ForFor forFor = new ForFor(); for( forFor.init(); forFor.isMax() == false; forFor.next() ) { System.out.println( forFor.getCounter() ); } // ForFor#init() // ForFor#isMax() // 0 // ForFor#next() // ForFor#isMax() // 1 // ForFor#next() // ForFor#isMax() // 2 // ForFor#next() // ForFor#isMax() // このように、まず「初期化」が処理され、次に「評価式」が評価されます。 // 「評価式」がtrueの場合、ブロック内が処理されます。 // 1周して戻ってきたら、「更新」を処理した後、再び「評価式」を評価します。 // これを繰り返し、「評価式」がfalseの場合に、ブロックを処理せず // ブロックの次へと処理が移ります。 } } /** * テスト用ForForクラス。 */ class ForFor { // カウンター。 private int counter = 0; /** * 「初期化」時に呼び出すメソッド。 */ public void init() { System.out.println( "ForFor#init()" ); counter = 0; } /** * 「評価式」時に呼び出すメソッド。 * counterが3未満であればfalse、それ以外はtrueを返します。 */ public boolean isMax() { System.out.println( "ForFor#isMax()" ); if( counter < 3 ) { return false; } return true; } /** * 「更新」時に呼び出すメソッド。 * カウンターを1増やします。 */ public void next() { System.out.println( "ForFor#next()" ); ++counter; } /** * カウンターを取得するメソッド。 */ public int getCounter() { return counter; } }
「みだし」に含まれているページ
- ASCII
- DecimalFormat
- for
- forステートメント
- for初期化ステートメント
- HttpURLConnection
- ISO
- ISO-10646-UCS-2
- ISO-2022-JP
- ISO-8859-1
- J2EE
- Java 2 Platform, Enterprise Edition
- Java 2 Platform, Standard Edition
- java.net.URL
- Log4j
- NumberFormatException
- Rss4j
- SimpleDateFormat
- SJC-P
- URI
- URL
- URLDecoder
- URLEncoder
- US-ASCII
- UTF-8
- WEB-INF
- フォーマット
- 入力フォーム
- 拡張for
- 文字化け
「解説」に含まれているページ
- (
- ++演算子
- <jsp>
- [L
- ArrayIndexOutOfBoundsException
- break
- Calendar
- Class
- ClassNotFoundException
- continue
- DOM
- for
- forステートメント
- for初期化ステートメント
- goto
- IndexOutOfBoundsException
- int
- Iterable<T>
- J2EE
- J2SE
- Java 2 Platform, Standard Edition
- JDBCドライバ
- RequestDispatcher
- StringIndexOutOfBoundsException
- switch
- while
- スクリプトレット
- ステートメント
- ラベルステートメント
- ループ
- ローカル変数
- ローカル変数宣言
- ローカル変数宣言ステートメント
- 予約語
- 再帰呼び出し
- 分岐
- 多重ループ
- 抜ける
- 拡張for
- 無限ループ
- 累乗
- 評価
「サンプルプログラムとか」に含まれているページ
- &=演算子
- &演算子
- ..
- 0x
- 10進数
- 16進数
- 2の補数
- 2進数
- 8進数
- :
- ;
- <%
- <<=演算子
- <<演算子
- <jsp:useBean>
- >>=演算子
- >>>=演算子
- >>>演算子
- >>演算子
- ^=演算子
- ^演算子
- args
- Arrays
- ASCII
- BigDecimal
- BigInteger
- break
- BufferedOutputStream
- BufferedWriter
- byte
- ByteArrayOutputStream
- Calendar
- char
- Class
- ClassNotFoundException
- Collection
- Comparable
- Comparator
- compareTo
- Connection
- continue
- Cookie
- CREATE TABLE
- DataInputStream
- DataOutputStream
- Date
- DecimalFormat
- DELETE
- DOM
- doPost
- double
- ExceptionInInitializerError
- execute
- File
- FilterOutputStream
- FilterWriter
- float
- for
- forステートメント
- for初期化ステートメント
- getBytes
- GregorianCalendar
- HashSet
- HttpServletRequest
- INSERT
- int
- InvocationTargetException
- Iterable<T>
- Iterator
- java.sql.Date
- JavaBeans
- Java仮想マシン
- JDBC
- JDBCドライバ
- JSP暗黙オブジェクト「config」
- JSP暗黙オブジェクト「request」
- JSP暗黙オブジェクト「session」
- LinkedHashMap
- LinkedList
- Locale
- long
- main
- NaN
- Node
- NOT NULL制約
- NumberFormatException
- ObjectInputStream
- ObjectOutputStream
- OutputStreamWriter
- PipedInputStream
- PipedOutputStream
- PipedReader
- PipedWriter
- POST
- PreparedStatement
- PrintStream
- PrintWriter
- Properties
- protectedメソッド
- RequestDispatcher
- ResultSet
- RSS
- Rss4j
- Runnable
- SELECT
- ServletConfig
- ServletContext
- short
- SimpleDateFormat
- sleep
- SQL
- SQLException
- SQLインジェクション
- Statement
- strictfp
- switch
- switchステートメント
- Thread
- Timestamp
- Tomcat
- TreeMap
- UPDATE
- volatile
- web.xml
- WHERE
- XML
- yield
- {
- |=演算子
- |演算子
- ~演算子
- アルゴリズム
- イテレーター
- イントロスペクション
- エポック
- エンコーディング
- エンコード
- カレントディレクトリ
- キャッシュ
- クイックソート
- クエリー
- クッキー
- クロスサイトスクリプティング
- コネクション
- コミット
- コメントアウト
- サニタイジング
- システムプロパティ
- スクリプトレット
- スケール
- スコープ
- スタックトレース
- セッションスコープ
- ソート
- ダイアログ
- ダンプ
- テーブル
- ディレクトリ
- デコード
- デバッガ
- デバッグ
- データベース
- トランザクション
- バイアス
- バイト
- バイナリーファイル
- バグ
- バッファアンダーラン
- バッファオーバーラン
- バブルソート
- ビット
- ビットシフト演算子
- ビットフラグ
- フォント
- ブロック
- プリペアードステートメント
- ボタン
- マージ
- マージソート
- モーダルダイアログ
- モードレスダイアログ
- ラベル
- ラベルステートメント
- リクエストスコープ
- リフレクション
- ループ
- レコード
- ロケール
- ローカル変数
- ローカル変数宣言
- ローカル変数宣言ステートメント
- ロールバック
- 一意
- 主キー
- 仮数部
- 修正マージソート
- 入力フォーム
- 切り上げ
- 切り捨て
- 列
- 制約
- 割り算
- 可変長配列
- 四捨五入
- 多重ループ
- 安定ソート
- 完全修飾名
- 実数
- 引き算
- 抜ける
- 拡張for
- 指数部
- 掛け算
- 改行文字
- 整数
- 文字コード
- 文字化け
- 昇順
- 木構造
- 未定義
- 桁溢れ
- 桁落ち
- 標準入出力
- 浮動小数点
- 無理数
- 無限ループ
- 無限大
- 算術右シフト
- 累乗
- 行
- 行列
- 論理右シフト
- 足し算
- 配列
- 降順