「Java/基礎/反復処理」の版間の差分

削除された内容 追加された内容
313 行
 
 
<div style="padding: 10px; background-color: rgb(244, 240, 240); font-size: small;"><b>参考:「<tt>:{{code|(line {{=}} in.readLine()) !{{=}} null</tt>」}}のような書き方について</b>
上記のサンプルでは、while文の反復条件が「<tt>{{code|(line {{=}} in.readLine()) !{{=}} null</tt>」}}と書かれています。
これは代入演算と比較演算を同時に行う書き方で、こうした類の処理によく使われるパターンですが、慣れないは奇異に見えるかもしれません。
 
なぜこうした書き方が可能なのかというと、代入演算の式は、その式で代入結果の値を返すからです。
念のため、処理の流れを追ってみましょう。
 
まず括弧内の処理、つまり「<tt>{{code|line {{=}} in.readLine()</tt>」}}が実行されます。この式は、変数<tt>{{code|line</tt>}}に代入された値を返します。要するに、全体で<tt>{{code|line</tt>}}が返されると考えてよいでしょう。
 
続いて、比較演算が行われます。括弧内を<tt>{{code|line</tt>}}に置き換えるとわかりよいでしょう。つまり「<tt>{{code|line !{{=}} null</tt>」}}という判定が行われることになります。{{code|line}}が{{code|null}}になった場合、行はそれ以上ないというサインなので、ループから抜ける必要があります。
</div>
 
330 行
上記のサンプルは、for文を使ってたとえば
 
<syntaxhighlight lang="java">
import java.io.*;
class CatLike {
public static void main(String[] args) throws IOException {
String line = null;
for (String fn : args) {
for (BufferedReader in = new BufferedReader(new FileReader(fn)); (line = in.readLine()) != null;) {
System.out.println(line = in.readLine()) != null; )
System.out.println(line);}
}
}
}
 
</syntaxhighlight>
というふうに書くこともできます。
どちらを使うかは、基本的に好みの問題です。