最大値 合計 カウンタ(5章の復習)
【課題】 コマンドラインに指定した2つの数値の大きいほうを表示しましょう。
5.1 コマンド・ライン の Compute1.java をもとに
Compare1.java を作成しました。
整数に変換し、比較し、表示をしている部分は以下のとおりです。
int arg1 = Integer.parseInt(args[0]);
int arg2 = Integer.parseInt(args[1]);
if(arg1 > arg2) pane.add(new JLabel("" + arg1));
else pane.add(new JLabel("" + arg2));
改良1
大きいほうを選択してから、ラベルを生成しましょう。
Compare2.java
int arg1 = Integer.parseInt(args[0]);
int arg2 = Integer.parseInt(args[1]);
int max;
if(arg1 > arg2) max = arg1;
else max = arg2;
pane.add(new JLabel(String.valueOf(max)));
改良2
3つの数のうちの最大のものを表示しましょう。
Compare3.java
比較をする部分を次のように書いてはいけません。
int max;
if(arg1 > arg2) {
if(arg1 > arg3) max = arg1;
else max = arg3;
} else {
if(arg2 > arg3) max = arg2;
else max = arg3;
}
pane.add(new JLabel(String.valueOf(max)));
通常、次のように書きます。
int max = arg1;
if(arg2 > max) max = arg2;
if(arg3 > max) max = arg3;
pane.add(new JLabel(String.valueOf(max)));
arg1 が最大と仮定し、 arg2 の方が大きければ修正し、さらに arg3 の方が大きければ再度修正する。
という手順です。
最大値
4つのときは ...、
arg1、arg2、arg3 ... という変数名も煩わしくなります。次のように書けます。
int max = Integer.parseInt(args[0]);
int arg;
arg = Integer.parseInt(args[1]);
if(max < arg) max = arg;
arg = Integer.parseInt(args[2]);
if(max < arg) max = arg;
arg = Integer.parseInt(args[3]);
if(max < arg) max = arg;
...
まず、最大値を保存する max を用意し、最初のパラメタの値を max に代入します。
2番目のパラメタを arg に(一時的に)代入しておき、
max より大きい場合にだけ、 max に代入します。
「 パラメタを arg におき、max と比べて大きい場合に max を入れ替えてゆく 」
ということを繰り返せば、最後には最大値が max に得られるという方法です。
for 文で書けば次のようになります。
int max = Integer.parseInt(args[0]);
int arg;
for(int i = 1; i < args.length; i ++) {
arg = Integer.parseInt(args[i]);
if(max < arg) max = arg;
}
先頭のパラメタを特別扱いにしたくなければ、max の初期値に Integer の最小値をいれておけば
うまくいきます。
int max = Integer.MIN_VALUE;
int arg;
for(int i = 0; i < args.length; i++) {
arg = Integer.parseInt(args[i]);
if(max < arg) max = arg;
}
合計
コマンドラインに与えた数値の合計を求めるのに、
int s = 0;
s = s + Integer.parseInt(args[0]);
s = s + Integer.parseInt(args[1]);
s = s + Integer.parseInt(args{2]);
...
といったコーディングを行います。あるいは Java らしく、
int s = 0;
s += Integer.parseInt(args[0]);
s += Integer.parseInt(args[1]);
s += Integer.parseInt(args{2]);
...
としても同じです。
同じ s という変数に次々に新しい値を足しこんでいくという
基本的なコーディングのパターンです。
for 文が書けるようになれば、次のように書けます。
int s = 0;
for(int i=0; i<args.length; i++) s = s + Integer.parseInt(args[i]);
あるいは、
int s = 0;
for(int i=0; i<args.length; i++) s += Integer.parseInt(args[i]);
1から10までの合計を計算したければ、次のように書きます。
int s = 0;
for(int i=1; i<=10; i++) s += i;
カウンタ
ボタンのクリックされた回数など、回数を数えるには次のように書きます。
int n; // カウンタの宣言
...
n = 0; // カウンタの初期化
...
n = n + 1; // カウンタのカウントアップ
...
カウントアップは次のようにも書けます。
n += 1;
さらに、
n++;
または、
++n;
といった書き方をするのが普通です。
n が最初に現れるところで、型宣言( int ) と 初期化( = 0 ) を忘れないようにしましょう。
int n = 0;
のように型宣言と初期化を1行で書くのが普通です。
ここで、++ を変数の前に書いた場合と、後ろに書いた場合の違いを比較してみましょう。
つぎのコーディングで、DOS画面に何が表示されるか考えてください。
int x = 5;
int y = 5;
System.out.println( ++x );
System.out.println( ++x );
System.out.println( x );
System.out.println( y++ );
System.out.println( y++ );
System.out.println( y );
実際にやってみましょう。
PrefixPostfix1.java
for 文の演習
コマンドラインに数値を1つ与えます。
この数値を N としたとき、
1 + 2 + 3 + ... + N
を表示するプログラムを作成しなさい。
Top Page
更新日: