課題0701
コンソールに三角形の3辺a,b,cの長さをそれぞれ入力させ、その三角形の面積をヘロンの公式で計算し表示するメソッドを使ったプログラム HeronMethod.java をパッケージ j1.lesson07 に作成しなさい。
ただし、「三角形の面積をヘロンの公式で計算し表示するメソッド」は名前が heron で引数は3つの実数とし、メソッド内での処理は引数を元に計算して表示するまでとする。
コンソールへの入力要求は次のように表示する。
- 辺aの長さ
- この直後に辺aの長さを入力させる
辺aの長さを入力:
- 辺bの長さ
- この直後に辺bの長さを入力させる
辺bの長さを入力:
- 辺cの長さ
- この直後に辺cの長さを入力させる
辺cの長さを入力:
必ず、辺a,b,cの順に入力させ、それぞれの辺の長さは実数を指定できること。今回は辺a,b,cから三角形を作れない場合は考慮しなくても良い (そのようなテストは行わない)。
結果の表示方法は次の通りとする。
三角形の面積はx
ただし、x の部分は heron メソッド内で計算を行った三角形の面積を出力すること。
結果の例
仮に、辺a,b,cにそれぞれ5.0,6.0,7.0を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。
辺aの長さを入力:5.0 辺bの長さを入力:6.0 辺cの長さを入力:7.0 三角形の面積は14.696938456699069
手順
指定した箇所で必ずテストを行うこと。
- パッケージ j1.lesson07 にクラス HeronMethod を作成 (ファイル名は HeronMethod.javaとなる)
- クラス内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
- 必ず throws IOException の記述を付加しておくこと (つまり、import java.io.*;も必要となる)
- クラス内に必要なメソッド (heron) の骨格を作成 (こちらには throws IOException は必要ない)
- テスト項目「HeronMethod に対する骨格テスト」をパス
- main以外のメソッド内に課題の内容を実装
- mainから各メソッドを呼び出して、メソッドが正しく動作しているか確認
- テスト項目「HeronMethod に対する単体テスト」をパス
- mainメソッド内に課題の内容を実装
- いくつかテストを行って、プログラムが正しく動作しているか確認
- テスト項目「HeronMethod に対する機能テスト」をパス
ヒント
第02週の課題を参照。
この回では、以下のようにプログラムを分割すればよい。
- main メソッド内
- 入力を受け取る
- heron メソッド内
- 面積を計算し、表示する
テストの失敗メッセージ
骨格テスト
メッセージ | 詳細 |
---|---|
(クラス名), existence | パッケージ内に課題で指定したクラスが存在していない。パッケージやクラス名を確認 |
(メソッド名), existence | 指定されたメソッドが存在しない |
(メソッド名), public | メソッドを作る際に public が抜けている |
(メソッド名), static | メソッドを作る際に static が抜けている |
(メソッド名), type void | メソッドを作る際に void 以外を指定している |
(メソッド名), throws ... | メソッドを作る際に throws... の指定がない |
単体テスト
メッセージ | 詳細 |
---|---|
(メソッド名), 期待された結果と異なります | (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照 |
単体テストの項目
項目名 | 詳細 |
---|---|
testHeron_111 | heron メソッドを 実引数 (1, 1, 1) で起動した |
testHeron_345 | heron メソッドを 実引数 (3, 4, 5) で起動した |
testHeron_789 | heron メソッドを 実引数 (7, 8, 9) で起動した |
機能テスト
メッセージ | 詳細 |
---|---|
余計な入力を待っていると考えられます | コンソール入力を取得する命令を4回以上行っていないか確認 |
次の入力を変換できませんでした (???) | ??? を取得しようとして失敗している。コンソール入力を取得する命令を確認 |
期待された結果と異なります | 出力された結果が期待された値と異なる。「期待された値」と「実際の値」を比較 (エラーメッセージが出力されているエリアの下のほうにあるバーをスクロールさせれば見ることができる) し確認。他にも直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す |
機能テストの項目
項目名 | 詳細 |
---|---|
test111 | 入力が順に 1, 1, 1 |
test345 | 入力が順に 3, 4, 5 |
test789 | 入力が順に 7, 8, 9 |
課題0702
コンソールから1以上の整数nを入力させ、nの約数を小さい順にすべて表示するプログラム Divisors.java をパッケージ j1.lesson07 に作成しなさい。
ただし、「引数に与えられた値 n に対して1からnまでの約数を全て表示するメソッド」を、名前が printDivisors で1つの整数を引数として取るようなメソッドとして作成すること。メソッド内での処理は引数を元に計算して表示するまでとする。
1以上の整数を入力させる、コンソールへの入力要求は次のように表示する。
1以上の整数を入力:
1以上の値以外が入力されたら、以下のように表示して終了する。
1以上の整数を入力してください
結果の例
入力に100を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。
1以上の整数を入力:100 1 2 4 5 10 20 25 50 100
入力の最初に-1を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。
1以上の整数を入力:-1 1以上の整数を入力してください
手順
指定した箇所で必ずテストを行うこと。
- パッケージ j1.lesson07 にクラス Divisors を作成 (ファイル名は Divisors.javaとなる)
- クラス内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
- 必ず throws IOException の記述を付加しておくこと (つまり、import java.io.*;も必要となる)
- クラス内に必要なメソッド (printDivisors) の骨格を作成 (こちらには throws IOException は必要ない)
- テスト項目「Divisors に対する骨格テスト」をパス
- main以外のメソッド内に課題の内容を実装
- mainから各メソッドを呼び出して、メソッドが正しく動作しているか確認
- テスト項目「Divisors に対する単体テスト」をパス
- mainメソッド内に課題の内容を実装
- いくつかテストを行って、プログラムが正しく動作しているか確認
- テスト項目「Divisors に対する機能テスト」をパス
テストの失敗メッセージ
骨格テスト
メッセージ | 詳細 |
---|---|
(クラス名), existence | パッケージ内に課題で指定したクラスが存在していない。パッケージやクラス名を確認 |
(メソッド名), existence | 指定されたメソッドが存在しない |
(メソッド名), public | メソッドを作る際に public が抜けている |
(メソッド名), static | メソッドを作る際に static が抜けている |
(メソッド名), type void | メソッドを作る際に void 以外を指定している |
(メソッド名), throws ... | メソッドを作る際に throws... の指定がない |
単体テスト
メッセージ | 詳細 |
---|---|
(メソッド名), 期待された結果と異なります | (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照 |
単体テストの項目
テスト失敗時に「Results」の欄の左側に出る「test~」は、テストの項目名を表している。
項目名 | 詳細 |
---|---|
testPrintDivisors_1 | printDivisors メソッドを 実引数 (1) で起動した |
testPrintDivisors_7 | printDivisors メソッドを 実引数 (7) で起動した |
testPrintDivisors_16 | printDivisors メソッドを 実引数 (16) で起動した |
機能テスト
メッセージ | 詳細 |
---|---|
余計な入力を待っていると考えられます | コンソール入力を取得する命令を2回以上行っていないか確認 |
次の入力を変換できませんでした (???) | ??? を取得しようとして失敗している。コンソール入力を取得する命令を確認 |
期待された結果と異なります | 出力された結果が期待された値と異なる。「期待された値」と「実際の値」を比較 (エラーメッセージが出力されているエリアの下のほうにあるバーをスクロールさせれば見ることができる) し確認。他にも直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す |
無限ループの可能性 | 一定時間内にプログラムが終了しなかった。ループが無限に続いていないか確認 |
機能テストの項目
テスト失敗時に「Results」の欄の左側に出る「test~」は、テストの項目名を表している。
項目名 | 詳細 |
---|---|
testM5 | 入力が -5 |
test0 | 入力が 0 |
test1 | 入力が 1 |
test2 | 入力が 2 |
test36 | 入力が 36 |
test257 | 入力が 257 |
課題0703 (optional)
(16進数が分からない場合は先に課題0704を解いてもよい)
コンソールから0以上の整数を入力させ、その値を8桁の16進数として表示するプログラム PrintAsHex.java をパッケージ j1.lesson07 に作成しなさい。
ただし、16進数で使う数字は 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F と、A から F には大文字のアルファベットを使用すること。
また、引数に int 型の整数を 1 つ受け取って、その16進数表現を8桁で表示するメソッド printAsHex を同クラス内に作成しなさい。メソッド内での処理は引数を元に計算して表示するまでとする。
0以上の整数を入力させる、コンソールへの入力要求は次のように表示する。
0以上の整数を入力:
0以上の値以外が入力されたら、以下のように表示して終了する。
0以上の整数を入力してください
0以上の値が入力されたら、この入力を16進数で表示する。ただし、8桁に満たない場合は上位を 0 で埋める。
結果の例
入力に19122942を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。
0以上の整数を入力:19122942 0123CAFE
手順
指定した箇所で必ずテストを行うこと。
- パッケージ j1.lesson07 にクラス PrintAsHex を作成 (ファイル名は PrintAsHex.javaとなる)
- クラス内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
- 必ず throws IOException の記述を付加しておくこと (つまり、import java.io.*;も必要となる)
- クラス内に必要なメソッド (printAsHex) の骨格を作成 (こちらには throws IOException は必要ない)
- テスト項目「PrintAsHex に対する骨格テスト」をパス
- main以外のメソッド内に課題の内容を実装
- mainから各メソッドを呼び出して、メソッドが正しく動作しているか確認
- テスト項目「PrintAsHex に対する単体テスト」をパス
- mainメソッド内に課題の内容を実装
- いくつかテストを行って、プログラムが正しく動作しているか確認
- テスト項目「PrintAsHex に対する機能テスト」をパス
ヒント
10進数とは各桁を0から9までの数字で表し、1桁目がd1、2桁目がd2、3桁目がd3、4桁目がd4である10進数nは以下のように表せる。
n = d4*1000 + d3*100 + d2*10 + d1 (0 <= di < 10) d1 = n/1 % 10 = (d4*1000 + d3*100 + d2*10 + d1) % 10 d2 = n/10 % 10 = (d4*100 + d3*10 + d2) % 10 d3 = n/100 % 10 = (d4*10 + d3) % 10 d4 = n/1000 % 10 = d4 % 10
1桁目がh1、2桁目がh2、3桁目がh3、4桁目がh4である16進数mは、以下のように表せる。
m = h4*16^3 + h3*16^2 + h2*16 + h1 (0 <= hi < 16)
10進数で各桁を抽出するには、以下のようにすれば良い。
(1桁目) n / 1 % 10 (2桁目) n / 10 % 10 (3桁目) n / 100 % 10 (4桁目) n / 1000 % 10
16進数ではどうすればよいか。
なお、10進数で扱う文字は0, 1, 2, 3, 4, 5, 6, 7, 8, 9 の10個であるが、16進数で扱う文字はそれに A, B, C, D, E, F の6個を加えた合計16個である。
16進数の各桁は、10進数で表すと以下のような関係になる。
16進数の文字 | 10進数で表記した場合 |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
A | 10 |
B | 11 |
C | 12 |
D | 13 |
E | 14 |
F | 15 |
テストの失敗メッセージ
骨格テスト
メッセージ | 詳細 |
---|---|
(クラス名), existence | パッケージ内に課題で指定したクラスが存在していない。パッケージやクラス名を確認 |
(メソッド名), existence | 指定されたメソッドが存在しない |
(メソッド名), public | メソッドを作る際に public が抜けている |
(メソッド名), static | メソッドを作る際に static が抜けている |
(メソッド名), type void | メソッドを作る際に void 以外を指定している |
(メソッド名), throws ... | メソッドを作る際に throws... の指定がない |
単体テスト
メッセージ | 詳細 |
---|---|
(メソッド名), 期待された結果と異なります | (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照 |
単体テストの項目
テスト失敗時に「Results」の欄の左側に出る「test~」は、テストの項目名を表している。
項目名 | 詳細 |
---|---|
testPrintAsHex_1 | printAsHex メソッドを 実引数 (1) で起動した |
testPrintAsHex_9 | printAsHex メソッドを 実引数 (9) で起動した |
testPrintAsHex_10 | printAsHex メソッドを 実引数 (10) で起動した |
testPrintAsHex_15 | printAsHex メソッドを 実引数 (15) で起動した |
testPrintAsHex_16 | printAsHex メソッドを 実引数 (16) で起動した |
testPrintAsHex_2147483647 | printAsHex メソッドを 実引数 (2147483647) で起動した |
testPrintAsHex_180150000 | printAsHex メソッドを 実引数 (180150000) で起動した |
機能テスト
メッセージ | 詳細 |
---|---|
余計な入力を待っていると考えられます | コンソール入力を取得する命令を2回以上行っていないか確認 |
次の入力を変換できませんでした (???) | ??? を取得しようとして失敗している。コンソール入力を取得する命令を確認 |
期待された結果と異なります | 出力された結果が期待された値と異なる。「期待された値」と「実際の値」を比較 (エラーメッセージが出力されているエリアの下のほうにあるバーをスクロールさせれば見ることができる) し確認。他にも直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す |
無限ループの可能性 | 一定時間内にプログラムが終了しなかった。ループが無限に続いていないか確認 |
機能テストの項目
テスト失敗時に「Results」の欄の左側に出る「test~」は、テストの項目名を表している。
項目名 | 詳細 |
---|---|
testM5 | 入力が -5 |
testM1 | 入力が -1 |
test0 | 入力が 0 |
test2147483647 | 入力が2147483647 |
test9 | 入力が 9 |
test10 | 入力が 10 |
test15 | 入力が 15 |
test16 | 入力が 16 |
test305419896 | 入力が 305419896 |
test51966 | 入力が 51966 |
課題0704 (optional)
コンソールから1以上の整数を入力させ、入力された値によって以下のような図形をコンソール上に表示するプログラム PlotDiamond.java をパッケージ j1.lesson07 に作成しなさい。
表示させる図形は以下の通りである。
入力された値が 1 の場合
*
入力された値が 2 の場合
* *** *
入力された値が 3 の場合
* *** ***** *** *
入力された値が 4 の場合
* *** ***** ******* ***** *** *
上記のような具合に、入力された値 n に対して、(2n - 1) 行の図形になる。
1以上の整数を入力させる、コンソールへの入力要求は次のように表示する。
図形の大きさを入力:
1以上の値以外が入力されたら、以下のように表示して終了する。
1以上の整数を入力してください
本課題では、「引数に与えられた値 n に対して上記のような図形を表示するメソッド」を、名前が plot で1つの整数を引数として取るようなメソッドとして作成すること。メソッド内での処理は引数を元に計算して表示するまでとする。
結果の例
入力に10を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。
図形の大きさを入力:10 * *** ***** ******* ********* *********** ************* *************** ***************** ******************* ***************** *************** ************* *********** ********* ******* ***** *** *
手順
指定した箇所で必ずテストを行うこと。
- パッケージ j1.lesson07 にクラス PlotDiamond を作成 (ファイル名は PlotDiamond.javaとなる)
- クラス PlotDiamond 内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
- 必ず throws IOException の記述を付加しておくこと (つまり、import java.io.*;も必要となる)
- クラス内に必要なメソッド (plot) の骨格を作成 (こちらには throws IOException は必要ない)
- テスト項目「PlotDiamond に対する骨格テスト」をパス
- main以外のメソッド内に課題の内容を実装
- mainから各メソッドを呼び出して、メソッドが正しく動作しているか確認
- テスト項目「PlotDiamond に対する単体テスト」をパス
- mainメソッド内に課題の内容を実装
- いくつかテストを行って、プログラムが正しく動作しているか確認
- テスト項目「PlotDiamond に対する機能テスト」をパス
ヒント
図形の一行分を表示するメソッド plotLine(int space, int star) などを作成すると、綺麗にプログラムが書ける。
テストの失敗メッセージ
骨格テスト
メッセージ | 詳細 |
---|---|
(クラス名), existence | パッケージ内に課題で指定したクラスが存在していない。パッケージやクラス名を確認 |
(メソッド名), existence | 指定されたメソッドが存在しない |
(メソッド名), public | メソッドを作る際に public が抜けている |
(メソッド名), static | メソッドを作る際に static が抜けている |
(メソッド名), type void | メソッドを作る際に void 以外を指定している |
(メソッド名), throws ... | メソッドを作る際に throws... の指定がない |
単体テスト
メッセージ | 詳細 |
---|---|
(メソッド名), 期待された結果と異なります | (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照 |
単体テストの項目
テスト失敗時に「Results」の欄の左側に出る「test~」は、テストの項目名を表している。
項目名 | 詳細 |
---|---|
testPlot_1 | plot メソッドを 実引数 (1) で起動した |
testPlot_4 | plot メソッドを 実引数 (4) で起動した |
機能テスト
メッセージ | 詳細 |
---|---|
余計な入力を待っていると考えられます | コンソール入力を取得する命令を2回以上行っていないか確認 |
次の入力を変換できませんでした (???) | ??? を取得しようとして失敗している。コンソール入力を取得する命令を確認 |
期待された結果と異なります | 出力された結果が期待された値と異なる。「期待された値」と「実際の値」を比較 (エラーメッセージが出力されているエリアの下のほうにあるバーをスクロールさせれば見ることができる) し確認。他にも直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す |
無限ループの可能性 | 一定時間内にプログラムが終了しなかった。ループが無限に続いていないか確認 |
機能テストの項目
テスト失敗時に「Results」の欄の左側に出る「test~」は、テストの項目名を表している。
項目名 | 詳細 |
---|---|
testM5 | 入力が -5 |
test0 | 入力が 0 |
test1 | 入力が 1 |
test10 | 入力が 10 |