もちろん
x = 1 + 2 + 3 + 4 + ..... + 100;
でできますが、繰り返しを使えば短く書けます。
変数に1を加えるのは
x = x + 1;
でしたが、これにさらに 2 を加えて
x = x + 2;
とすれば x は 3 になっているはず。
これにさらに 3 を加えると
x = x + 3;
とすれば x は 6 になっているはず。つまり、
int x = 0; x = x + 1; x = x + 2; x = x + 3; System.out.println(x);
で、6 と表示されるということです。
1,2,3,...を i として
x = x + i;
という計算式を i を 1 から 100 まで 1,2,3,...と変化させながら繰り返せば良いはずです。
public class Souwa01 { public static void main( String[] args ) { int x = 0; ????????? x = x + i; ? System.out.println( x ); }//mainの終わり }//classの終わり
コンパイルと実行は次のようにします。
$ javac Souwa01.java $ java Souwa01
奇数は 1,3,5,7,9,....97,99 です。
Souwa01.java で 1,2,3,4,...100 だったものを 1,3,5,7,9,....97,99 になるように、くりかえしの条件を変更すればOKです。
public class Souwa02 { public static void main( String[] args ) { int x = 0; ????????? x = x + i; ? System.out.println( x ); }//mainの終わり }//classの終わり
コンパイルと実行は次のようにします。
$ javac Souwa02.java $ java Souwa02
java で、i が 7で割ったら3余る数かどうか調べるには、
if ( (i % 7) == 3 )
とします。% が割り算の余りを求める演算です。
これを使っても出来ますが、となり同士の奇数の差が2であるように、となり同士の差が7であることを使えば Souwa02.java と同様に出来ます。
public class Souwa03 { public static void main( String[] args ) { int x = 0; ????????? x = x + i; ? System.out.println( x ); }//mainの終わり }//classの終わり
コンパイルと実行は次のようにします。
$ javac Souwa03.java $ java Souwa03
2,5,3,1,4 の並べ替え
データをdata[0]からdata[4]に格納する
int[] data = { 2, 5, 3, 1, 4 };
data[0] | data[1] | data[2] | data[3] | data[4] |
2 | 5 | 3 | 1 | 4 |
並べ替え手順については、教科書の図を参照
(1) data[0]の確定まで
最初はdata[0]からdata[4]までを対象にする
data[0]と、data[1]からdata[4]まで、つまり 5,3,1,4 を一つずつ比較し、より小さいものと取り替える。
最後のdata[4]までいったら、data[0]には1が入っているが、これは一番小さいのでこれで確定。
(2) data[1]の確定まで
次にdata[1]からdata[4]までを対象にする
data[1]と、data[2]からdata[4]までを一つずつ比較し より小さいものと取り替える。
最後のdata[4]までいったら、data[1]には2が入っているが、これは二番目に小さいのでこれで確定。
(3) data[2]の確定まで
次にdata[2]からdata[4]までを対象にする
data[2]と、data[3]からdata[4]までを一つずつ比較し より小さいものと取り替える。
最後のdata[4]までいったら、data[2]には2が入っているが、これは二番目に小さいのでこれで確定。
・・・
このように、最初にdata[0]を確定させ、次にdata[1]を確定させ、次にdata[2]を確定させる。この 0,1,2,...を i で表すと、
for( int i=0; data.length-1 >i; i++ ){ ???? }
となります。
最後が定番のdata.length>iでないのはdata[3]まできめればdata[4]は自動的に決まるからです。
次に、
data[0]を確定するときには、data[0]と、data[1]からdata[4]までを比較。
data[1]を確定するときには、data[1]と、data[2]からdata[4]までを比較。
これを j で表すと、
data[j]を確定するときには、data[j]と、data[j+1]から最後までを比較。
となります。
i の時には for( int j=i+1; data.length>j; j++ ){ if ( data[i]>data[j] ){ //data[i]とdata[j]を交換する } }
終わったら、結果を表示します。Koukan01.java の最後に書いてある方法でいいでしょう。
次の表のように data[i] と data[j] を比較して交換しています。
data[0] | data[1] | data[2] | data[3] | data[4] | ||
i=0 | 2 | 5 | 3 | 1 | 4 | j=1〜4 |
j=1 | j=2 | j=3 | j=4 | |||
i=1 | 1 | 5 | 3 | 2 | 4 | j=2〜4 |
j=2 | j=3 | j=4 | ||||
i=2 | 1 | 2 | 5 | 3 | 4 | j=3〜4 |
j=3 | j=4 | |||||
i=3 | 1 | 2 | 3 | 5 | 4 | j=4〜4 |
j=4 |
data.length は 5 になりますから、
data.length-1 > i で i は 3 まで
data.length > j で j は 4 までになります。