繰り返し構文は、C言語と同じ使い方ができる。一部機能が拡張されている。
繰り返し何かの処理を行わせるときに使う。
|
for ( 初期化式 ; 条件式 ; 変化式 ) { 処理 }
|
繰り返し何かの処理を行わせるときに使う。
|
while ( 条件式 ) { 処理 }
|
繰り返し何かの処理を行わせるときに使う。必ず最低1回は処理される。
|
do { 処理 } while ( 条件式 );
|
変数に対して加減乗除を施すために、決まった書き方がある。
下図のような右上が直角の三角形状にアスタリスク文字(*)を並べて画面表示するプログラム (クラス名 Ex5、ファイル Ex5.java) を書きなさい。
外側が行単位で、内側が文字単位による、二重の繰り返し構文を使って表示させること。
※ Java 11以降では、内側の繰り返しを使う代わりに、String の repeat メソッドを使ってスペースまたはアスタリスクを指定個数出力させることができる。しかしながら、この講義では、演習およびテストでの類題において、二重ループの問題として、repeat メソッドを使わずに記述する必要がある。
三角形の高さ (アスタリスクの数) を変数 h で表す。メッセージを出して、キーボードから h の値を入力するものとする。
h は 2 から 15 の範囲の整数とし、それ以外はエラーメッセージを表示して終了させること。下図は h に 5 を入力した例。アスタリスク(*)とスペースの文字幅が等しい等幅フォントを使っている前提で書いてよい。

正しい動作を確認できたら、
をテキストファイル (拡張子 txt) にまとめる。
解答例 (演習課題名、クラス名が異なる可能性あり。以下も同様)
ひとつ前のファイル Ex5.java を Ex6.java としてコピーし、クラス名を Ex6 に変更し、以下のように追加修正しなさい。
入力された三角形の高さが2〜15のとき
三角形のタイプ(1〜4)を指定してください
1. 左上直角
2. 右上直角
3. 左下直角
4. 右下直角
のようなメッセージを出して三角形のタイプ(1〜4)を入力し、指定されたタイプで表示するようにしなさい。
図形は、外側が行単位で、内側が文字単位による、二重の繰り返し構文を使って表示させること。
タイプが 1 〜 4 の範囲にない場合は適切なエラーメッセージを表示して終了させること。
正しい動作を確認できたら、
をテキストファイル (拡張子 txt) にまとめる。
以下のプログラム Ex7 (ファイル Ex7.java) を作りなさい。
自然対数の底 e を求める一方法
1 + 1/1! + 1/2! + 1/3! + ...
の途中までの和を求めることで、e の近似値を計算させる。 まず、整数 n の値を入力し、以下の式で e の近似値を求める。
1 + 1/1! + 1/2! + 1/3! + ... + 1/n!
ただし、この演習では、上式の左から右に順に加算していくものとする。
n の入力が整数でないか 0 以下の値ならエラーを表示して終了させる。
e の近似値はdoubleで計算し、近似値自身 および Math.E との差 を表示する。
コンパイル・実行し、下記入力をしてみなさい。
n を1ずつ大きくしていっても、n がある値以上になると結果が変化しなくなる。
結果が変化しなくなる最初の n の値。
以下をテキストファイル (拡張子 txt) にまとめる。
Javaでは、配列は「配列オブジェクト」として扱われる。
使い方は C/C++ と似ている。インデックスは 0 から数える。
a[3] ≡ *(a + 3) ≡ *(3 + a) ≡ 3[a]a[3] の形式のみ許される。多次元配列は、配列の要素を配列とすることによって作る。
|
データ型[ ] 配列名; または | ||||||||
| ||||||||
|
配列型の変数を作成する。変数自体の値は null (インスタンス変数またはクラス変数のとき) または不定 (ローカル変数のとき)。 ※ null はその変数に有効なオブジェクトが結び付けられていないことを示す特殊な値。 データ型[ ] 配列名; も データ型 配列名[ ]; も同じ意味。以下でも同様。 | ||||||||
|
---------------------------------------------------------------------- | ||||||||
|
データ型[ ] 配列名 = new データ型[サイズ]; | ||||||||
| ||||||||
|
大きさ「サイズ」の配列を宣言する。配列名[0] から配列名[サイズ - 1] までのサイズ個の要素が確保される。 | ||||||||
|
---------------------------------------------------------------------- | ||||||||
|
データ型[ ] 配列名 = { 初期化データの並び }; | ||||||||
| ||||||||
|
「初期化データの並び」で指定される配列を宣言する。配列の大きさは初期化データの大きさになる。 |
|
配列名.length |
|
その配列の大きさを表す。 |
int[ ] a = new int[10];
int型の要素10個を持つ配列 a を作る。要素は a[0] から a[9] までで、すべて 0 になっている。
a.length は 10 になる。
double[ ] x = { 11.4, 83.5, 16.3, 20.7 };
double型の要素4個を持つ配列 x を作る。要素は x[0] (値 11.4) から x[3] (値 20.7) まで。
x.length は 4 になる。
String[ ] sel = new String[3];
String型の要素3個を持つ配列 sel を作る。
要素は sel[0], sel[1], sel[2] で、すべて null になる。空文字列 "" で初期化されるわけではないので注意。
String[ ] msg = { "No", "Yes" };
String型の要素2個を持つ配列 msg を作る。
要素は msg[0] が値 "No"、 msg[1] が値 "Yes" に初期化される。
double[ ][ ] mat = new double[5][3];
double型のサイズ5×3の2次元配列 mat を作る。
実際には、「サイズ3のdouble型配列」を5個持つ配列、となる。
要素はすべて 0 に初期化される。
下図のように九九の表を表示させるプログラム Ex8_1 (クラス名 Ex8_1、ファイル Ex8_1.java) を作りなさい。
整数の2次元配列(9×9サイズ)を定義し、for文の二重ループによって、
配列[i][j] 1-1 <= i <= 9-1, 1-1 <= j <= 9-1
の各要素が対応する九九の値を持つように設定する。
最後に、計算した九九の表を、for文の二重ループによって表示する。
縦方向に文字をそろえ、きれいな表とすること。簡単には、表の中の値を System.out.printf で桁数を指定して表示させればよい。

ファイル Ex8_1.java を Ex8_2.java という名前にコピーしクラス名も変更する。
Ex8_2 のプログラム (クラス名 Ex8_2、ファイル Ex8_2.java) を、
整数 n を 自分の学籍番号が 23CWXYZ として、n = Z (Z≠0,1 のとき)、または n = 9-Z (Z=0,1 のとき) として
2次元配列の各要素が、「九九の値」を n で割った余り
を持つように変更し、出力を示しなさい。
縦方向に文字をそろえ、きれいな表とすること。
※ 参考のため、学籍番号 23C4321 (Z=1) のとき、すなわち n = 9-Z = 8 のときの出力を下に示す。(実際の出力は学籍番号によって異なる)

正しい動作を確認できたら、
をテキストファイル (拡張子 txt) にまとめる。
char[] codeTable = new char[256];
のように、256個の要素を持つchar配列を定義し、
for (int c = 32; c <= 126; c++) {
codeTable[c] = (char)c;
}
のように、32〜126 の範囲にコードに対応する文字を入れておく。
この codeTable 配列の値を使って、以下のように、
まず、ある文字コード(10進で 32〜126 の範囲)を入力して、それに対応する文字を表示し、
その下に、文字コード(32〜126)の文字の対応表を表示するプログラム Ex9 (ファイル Ex9.java) を作成しなさい。

正しい動作を確認できたら、
をテキストファイル (拡張子 txt) にまとめる。
上の演習プログラムを、コードの入力を10進でなく16進で行うプログラム Ex10 (ファイル Ex10.java) に変更しなさい。
出力例:

正しい動作を確認できたら、
をテキストファイル (拡張子 txt) にまとめる。
if文演習の数当てプログラムのファイル Ex3.java をコピーして名前変更し、ファイル名 Kadai2.java クラス名 Kadai2 としなさい。ファイルを追加修正して以下のように動作を変更しなさい。
繰り返しを使って、正解が出るまで整数の入力とメッセージ表示を続け、当りが出たら、
を表示して終了する。
ソースファイルでは、javadocコメントも課題に合うように、クラスの説明部分に
および @author の後に 学籍番号・氏名 を記入すること。
当てる数の範囲を 1 〜 999 の整数とする。
整数でない入力や 1 〜 999 の範囲にない入力があった場合は、エラーメッセージを出すだけで、入力を継続するようにしなさい。IOException が発生したときだけは即座にプログラムを終了させなさい。
範囲内の整数の入力値のみ回答数に数える。
範囲内の入力値を int 配列に保存していくこと。回答の最大数は 11 とする。11回答えて正解しなかった場合は「回数オーバーです」と表示して終了させる。ちょうど11回で正解を答えた場合は回数オーバーを表示してはいけない。
ループ変数は単調に増加あるいは減少させること。増加・減少を混ぜたコードは不可。
なお、下記実行例のような出力となるよう、出力部分を調整しなさい。
実行例:

以下をテキストファイル (拡張子 txt) にまとめて授業のWebページから提出しなさい。
なお、上記実行例では、上下の範囲を狭めていく通常の方法によって数当てを行なうこと。当てる数が判明した状態での実行は行なわないこと。
/** で始まっていない解答例 (課題番号・クラス名が異なる可能性あり)
拡張for文 は、ある種のデータの集まり (配列、リストなど java.lang.Iterable インタフェースを実装したオブジェクト) が持つ各要素に対して、繰り返し何らかの処理を行わせるときに使う。for-each文 といわれる場合もある。
|
for ( 要素の型 変数名 : データの集まり ) { 処理 「データの集まり」の中にある個々の要素が、順に、「変数名」でアクセスできる。 } |
int[ ] ar = { 5, 2, 9, 1 };
int sum = 0;
for (int e : ar) {
sum += e;
System.out.print(e + " ");
}
System.out.println("sum=" + sum);
配列 ar の個々の要素が順に変数 e として繰り返し処理の内部で使われる。このコードをmainメソッドの中に入れて実行させると、出力は
となる。
以下に説明するプログラム (クラス名 Ex11、ファイル名 Ex11.java) を作成しなさい。
下記の要素を持つ文字列配列を定義し、
"The", "jay,", "pig,", "fox,", "zebra", "and", "my", "wolves", "quack", "!", "Quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog", ".", "Who", "packed", "five", "dozen", "old", "quart", "jugs", "in", "my", "box", "?"
mainメソッド中で、拡張for文を使って、配列の各要素を、間に空白を入れて出力させなさい。ただし、要素が
".""!""?"
に等しいときは、前にも後ろにも空白を入れず、その代わりに後ろに改行 (System.lineSeparator() で取得したもの) を出力させなさい。
String の一致は equals メソッドで判定できる。一致する場合は true、しない場合は false が返る。
なお、出力する各行の先頭には余分な空白を入れてはいけない。
出力: (英語のパングラム (pangram) 3文)

正しい動作を確認できたら、
をテキストファイル (拡張子 txt) にまとめる。