Java入門者用演習問題

私が2015/16年に新入社員向けのJava講習を行った時に作成した演習問題です。

qiitaの皆さんには不要なものですが、研修などにお使いください。私が作成したものなので、著作権の心配は無用です。

実際にやってもらうと、途中までしか進みませんでした。いずれにしろ、内容認識、チェックの上でお使いください。



■ 未経験者向Java演習-制御文・配列

○ 0010 三角形の面積を求める
 ・底辺と高さ(両方とも整数)を変数に設定する
 ・三角形の面積を求める
　 ・注、整数ではないことに注意
 ・面積を表示する

○ 0020 起動引数をすべて表示する

○ 0030 四角形の面積を求める

○ 0040 四角形の面積を求めるメソッドを作成してmainメソッドから呼び出す

○ 0050 四角形の面積を求めるメソッドを作成してmainメソッドから呼び出す
　 縦と横の数値は、起動引数から与えるようにする
　 起動引数を数値に変えるには、次のメソッドを使用する
　 public static inf toInt(String str) {
　　 return Integer.parseInt(str);
　 }

○ 0060 偶数・奇数判定
　 整数値を適当に変数に設定する
　 その値を判定して「偶数」または「奇数」と表示する

○ 0070 int変数aとbの値を他の変数を使わないで入れ替える

○ 0080 指定された年がうるう年であるかを判定する
　 年を変数に設定
　 うるう年かどうかを判定
　 「うるう年」または「平年」を表示
　 判定する部分はメソッドにすること
　 以下の年でテストする
　 2015,2016,2100,2400

○ 0090 数値変数の値を10回表示する
　　　　表示する部分はメソッドにすること

○ 0100 数値および回数を設定し、その数値を回数分足し算し、結果を画面に表示する
　 for文を使用すること

○ 0110 数値および回数を設定し、その数値を回数分足し算し、結果を画面に表示する
　 while文を使用すること

○ 0120 数値および回数を設定し、その数値を回数分足し算し、結果を画面に表示する
　 do～while文を使用すること

○ 0130 天気予報 - if文を使用する
　 予報を変数に設定 1:晴れ、2:曇り、3:雨、4:雪
　 雨か雪なら「傘を持っていく」と表示

○ 0140 天気予報 - switch文を使用する
　 予報を変数に設定 1:晴れ、2:曇り、3:雨、4:雪
　 雨か雪なら「傘を持っていく」と表示


○ 0150 天気予報 - if文やswitch文は使用しない
　 予報を変数に設定 1:晴れ、2:曇り、3:雨、4:雪
　 雨か雪なら「傘を持っていく」と表示


○ 0160 数値計算
　 0から9までのどれかの数値を変数aに設定する
　 適当な値を変数bに設定する
　 変数aが0,3,6,8の場合は、変数bを3倍にして表示する
　 変数aが以外の場合は、変数bを2倍にして表示する


○ 0170 数値計算 - if文やswitch文は使用しない
　 0から9までのどれかの数値を変数aに設定する
　 適当な値を変数bに設定する
　 変数aが0,3,6,8の場合は、変数bを3倍にして表示する
　 変数aが以外の場合は、変数bを2倍にして表示する


○ 0180 曜日("Mon","Tue","Wed","Thu","Fri","Sat","Sun")を判定して日本語で曜日を表示する


○ 0190 曜日("Mon","Tue","Wed","Thu","Fri","Sat","Sun")を判定して日本語で曜日を表示する
　 if文やswitch文は使用しない


○ 0200 曜日("Mon","Tue","Wed","Thu","Fri","Sat","Sun")を判定して、「休み」または「仕事」と表示する
　 if文やswitch文は使用しない


○ 0210 時刻(0～23時)にもとづいて、挨拶を表示する if文を使用する
　 0～5　 : お休み
　 6～11　: お早う
　 12～17 : こんにちは
　 18～23 : 今晩は

○ 0220 時刻(0～23時)にもとづいて、挨拶を表示する switch文を使用する
　 0～5　 : お休み
　 6～11　: お早う
　 12～17 : こんにちは
　 18～23 : 今晩は

○ 0230 時刻(0～23時)にもとづいて、挨拶を表示する if文やswitch文は使用しない
　 0～5　 : お休み
　 6～11　: お早う
　 12～17 : こんにちは
　 18～23 : 今晩は


○ 0240 整数の配列の合計値を求める
　　 テストデータ
　　 int[] intArray = new int[]{44,74,17,53,66,26,12,49,60,72,95,15,37,88,63,20,87,96,58,12};
○ 0250 整数の配列の中から、最大値と最小値を求める
　　 テストデータは以下を使用する
　　 int[] intArray = new int[]{44,74,17,53,66,26,12,49,60,72,95,15,37,88,63,20,87,96,58,12};

○ 0260 整数の配列のうち、偶数値のみ取り出して、別の配列を作る
　　 テストデータ
　　 int[] intArray = new int[]{44,74,17,53,66,26,12,49,60,72,95,15,37,88,63,20,87,96,58,12};

○ 0270 整数の配列の平均値より大きいものを求めて表示する
　　 テストデータ
　　 int[] intArray = new int[]{44,74,17,53,66,26,12,49,60,72,95,15,37,88,63,20,87,96,58,12};


○ 0280 商品の売上データの管理
　以下のような商品の売上データがある、指定された商品名の売上を求める
　データ構造は配列だけを使用する
　商品A:　　 100
　商品B:　　 150
　商品C:　　 120
　商品D:　　　80


○ 0290 商品の売上データの管理
　以下のような支店ごとの商品の売上データがある、指定された支店と商品名の売上を求める
　データ構造は配列だけを使用する
　　　　　　 支店A　 支店B　 支店C　支店D
　商品A:　　 100　　 150　　 120　　110
　商品B:　　 150　　 110　　　90　　130
　商品C:　　 120　　 200　　 210　　170
　商品D:　　　80　　　70　　　90　　110


○ 0300 商品の売上データの管理
　以下のような支店ごとの商品の売上データがある、
　120以上の売上を上げた、支店・商品を表示する
　データ構造は配列だけを使用する
　　　　　　 支店A　 支店B　 支店C　支店D
　商品A:　　 100　　 150　　 120　　110
　商品B:　　 150　　 110　　　90　　130
　商品C:　　 120　　 200　　 210　　170
　商品D:　　　80　　　70　　　90　　110


○ 0310 10進数を2進数に変換して表示する


○ 0320 10進数を16進数に変換して表示する


○ 0330 整数の配列をソートする - ソートロジックは自作
　　 データ構造は配列だけを使用する
　　 テストデータ
　　 int[] intArray = new int[]{44,74,17,53,66,26,12,49,60,72,95,15,37,88,63,20,87,96,58,12};
○ 0340 文字列の配列をソートする - ソートロジックは自作
　　 データ構造は配列だけを使用する
　　 テストデータ
　　 String[] strArray = new String[]{
　　　 "emhjopwxaz",
　　　 "ykxfjihxvv",
　　　 "oqsuoeojku",
　　　 "stvzdzdplo",
　　　 "ftrmgkauna",
　　　 "ackzqxlchf",
　　　 "dqttpisosm",
　　　 "psjhgorrem",
　　　 "kfcrgfxenb",
　　　 "vwappsvdld",
　　　 "gvovlddccr",
　　　 "ybaoyevbsl",
　　　 "thhujdjaqk",
　　　 "luxrfzmlyz",
　　　 "zpewohxhvc",
　　　 "whcddsgogv",
　　　 "hzyjmgrbxw",
　　　 "mjmxnxawrw",
　　　 "hdndjktido",
　　　 "vymqiltdzq"
　　 };


○ 0350 100以下の素数を求める

○ 0360 100以下の素数を求める - 「エラトステネスの篩」で求める
　 http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/ErSieve.html


○ 0370　整数の配列に0～4の数値が入っている
　　　そのうち1⇒1の組が何個あるかを判定する
　　　0⇒1⇒1⇒1⇒3は一個
　　　0⇒1⇒1⇒1⇒1⇒3は二個
　　　データ構造は配列だけを使用する
　テストデータ
　int[] intArray = new int[] {
　　0,1,1,3,1,2,3,1,0,3,1,1,2,0,1,1,1,1,2,3,2,2,0,3,3,3,2,3,2,0,0,3,3,2,0,0,3,0,1,0
　};


○ 0380　整数の配列に0～9の数値が入っている、この中で一番多く現われた数字とその回数を求める
　　　データ構造は配列だけを使用する
　テストデータ
　int[] intArray = new int[] {
　　8,0,7,0,7,1,0,7,0,2,6,2,5,7,9,1,8,1,2,4,1,8,1,9,8,7,2,3,5,0
　};

○ 0390　整数の配列の中で一番多く現われた数値とその回数を求める
　　　入っている数値は正または0の数
　　　データ構造は配列だけを使用する
　テストデータ
　int[] intArray = new int[]{
　　49,14,24,1,31,46,24,10,0,41,18,4,8,19,15,25,12,26,46,6,22,13,12,3,40,25,22,23,43,26,19,11,8,10,43,42,18,5,20,43,20,24,25,34,2,11,19,34,15,44,44,24,12,48,10,29,40,5,37,49,23,18,25,38,28,16,0,48,17,4,0,11,20,11,22,48,28,37,14,40,34,41,46,17,34,32,2,34,7,13,20,42,41,40,48,46,30,49,33,10
　};


○ 0400 住所クラスを定義する
　・氏名
　・郵便番号
　・都道府県
　・市町村以下

○ 0410 住所クラスを使って住所録アプリを作成する
　・クラス
　　・住所録アプリクラス
　　・住所クラス
　・処理内容
　　・五人の住所データを作成して、それを画面に表示する

○ 0420 (会社の)部署クラスを定義する
　・部署番号
　・部署名


○ 0430 社員クラスを定義する
　・社員番号
　・氏名
　・年齢
　・所属部署番号

○ 0440 部署クラスと社員クラスを使って、社員情報アプリを作成する
　・クラス
　　・社員情報アプリクラス
　　・部署クラス
　　・社員情報クラス
　・処理内容
　　・部署オブジェクトを二個作成する、営業部門と生産部門など
　　・社員オブジェクトを六個作成する、部門は適当に分ける
　　・それぞれの社員の情報を部署名も含めて表示する

○ 0450 自動販売機
　 ・以下の条件で飲み物の自動販売機の模擬するプログラム
　　 1.扱う商品は1種類で価格は140円とする。
　　 2.在庫の初期値は5個とし、在庫が無くなったら販売終了とする。
　　 3.価格以上の硬貨が投入されたら、商品とお釣りを排出する
　　 4.釣銭は無限に用意されているものとする。
　　 5.10円、50円、100円、500円以外の硬貨は受け付けず返却する。
　　 5.まとめ買い、連続買いはできないものとする。
　　 注、商品の排出、つり銭の排出は、メッセージを表示する。
　 ・コインを投入する処理は以下を使用すること

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

　// コイン投入の処理
　private static int inputCoin() throws IOException {
　　p("投入済み金額は"+getAmount()+"円です");
　　System.out.print("input coin >");
　　BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
　　String st = br.readLine();
　　return Integer.parseInt(st);
　}

==== ended



■ 未経験者向Java演習-Stringとjava.util

□ 文字列系-初級

○ 0010 ある文字列がnull文字列であるかを判定する

○ 0020 以下の文字列から"abc"を検索し、その位置を表示し、合計何個あるかをカウントする
　　　"abcxyzabcxyzabcxyz abcxyzabcxyz"

○ 0030 以下の文字列の一番後ろの"abc"の位置を表示する
　　　"abcxyzabcxyzabcxyz abcxyzabcxyz"

○ 0040 以下の文字列から"abc"出現後に"def"が出現した位置を表示する
　　　 "def abc def"

○ 0050 大文字・小文字変換 - 以下の文字列の先頭の文字を大文字にする
　　　"abcdef"

○ 0060 大文字・小文字変換 - 以下の文字列の最後の文字を大文字にする
　　　"abcdef"

○ 0070 文字列削除 - 以下の文字列からdefを削除する
　　　"abcdefghijkl"

○ 0080 文字列削除 - 以下の文字列からdefを削除する
　　　"abcdefghijklabcdefghijkl"

○ 0090 文字列削除 - 以下の文字列から最後の"def"を削除する
　　　"abcdefghijklabcdefghijklabcdefghijkl"

○ 0100 文字列変換 - 以下の文字列のSundayを日曜日に変換する
　　 Stringのreplace,replaceAll,replaceFirstは使わないこと
　　　"abcSundaydef"

○ 0110 文字列の分割 - 以下の文字列を , で区切って単語に分割する
　　　各単語の前後のスペースは削除する
　　　" abc , def , ghi , jkl "
　　　Stringのsplitは使わないこと、注、実務ではsplitを使って処理する
　　　注、StringTokenizerは古いので使用しないこと

○ 0120 文字列削除 - 以下の文字列から後ろのdefを削除する
　　　"abcdefghijklabcdefghijkl"



□ List系-初級

○ 0210 List<String>に要素を入れ、その要素をすべて表示する

○ 0220 List<String>に要素を入れ、その要素をすべて逆順に表示する

○ 0230 Listにnullが入れられるかどうか確認する

○ 0240 Listに同じ値が入れられるかどうか確認する

○ 0250 List<String>の指定された番号の要素を指定された文字列で置き換える
　 以下のメソッドを作成する
　 List<String> replace(List<String> list,String str)

○ 0260 List<String>の二つの番号の要素を交換する
　 以下のメソッドを作成する
　 List<String> swap(List<String> list,int n0,int n1)

○ 0270 List<String>からstrで始まる要素を削除する
　 以下のメソッドを作成する
　 複数の方法で実現することを考える
　 List<String> remove(List<String> list,String str)
　 テストデータは以下を使用する - "b"から始まるデータを削除する
　 "aaa","bbb","ccc","bbb","ddd","eee","bbb","fff","ggg","bbb","hhh"



□ Set系-初級

○ 0310 Set<String>に値を設定し、その後その値をすべて取り出して表示する

○ 0320 Setにnullが入れられるか確認する

○ 0330 Setに同じ値が入れられるか確認する

○ 0340 Set<String>に値を設定し、ある値がSetに存在するか確認する
　・Setの内容
　　"aaa","bbb","ccc","ddd","eee"
　・確認する内容
　　"bbb"
　　"zzz"

□ Map系-初級

○ 0410 Map<String,String>にキーと値を設定し、そのすべてのキーと値を取り出して表示する

○ 0420 Map<String,String>にキーと値を設定し、すべての値を表示する

○ 0430 Mapのキーにnullが入れられるかどうか確認する

○ 0440 Mapの値にnullが入れられるかどうか確認する

○ 0450 Mapの値に同じ値がいれられるかどうか確認する

○ 0460 Map<String,String>から特定の値の組を削除する
　 ・以下のMapから"333"の値の組を削除する
　　 "aaa" => "111"
　　 "bbb" => "222"
　　 "ccc" => "333"
　　 "ddd" => "444"
　　 "eee" => "555"

○ 0470 時刻(0～23時)にもとづいて、挨拶を表示する
　 0～5　 : お休み
　 6～11　: お早う
　 12～17 : こんにちは
　 18～23 : 今晩は

○ 0480 曜日("Mon","Tue","Wed","Thu","Fri","Sat","Sun")を判定して、「休み」または「仕事」と表示する

○ 0490 商品の売上データの管理 - 0
　以下のような商品の売上データがある、指定された商品名の売上を求める
　商品A:　　 100
　商品B:　　 150
　商品C:　　 120
　商品D:　　　80

○ 0500 商品の売上データの管理 - 1
　以下のような支店ごとの商品の売上データがある、指定された支店と商品名の売上を求める
　　　　　　 支店A　 支店B　 支店C　支店D
　商品A:　　 100　　 150　　 120　　110
　商品B:　　 150　　 110　　　90　　130
　商品C:　　 120　　 200　　 210　　170
　商品D:　　　80　　　70　　　90　　110


○ 0510　整数の配列の中で一番多く現われた数値とその回数を求める
　　　入っている数値は正または0の数
　テストデータ
　int[] intArray = new int[]{
　　49,14,24,1,31,46,24,10,0,41,18,4,8,19,15,25,12,26,46,6,22,13,12,3,40,25,22,23,43,26,19,11,8,10,43,42,18,5,20,43,20,24,25,34,2,11,19,34,15,44,44,24,12,48,10,29,40,5,37,49,23,18,25,38,28,16,0,48,17,4,0,11,20,11,22,48,28,37,14,40,34,41,46,17,34,32,2,34,7,13,20,42,41,40,48,46,30,49,33,10
　};


□ ソート系-初級

○ 0610 文字列のリストを昇順にソートする - ソートロジックは自作
　　 テストデータは以下を使用する
　　　 "emhjopwxaz",
　　　 "ykxfjihxvv",
　　　 "oqsuoeojku",
　　　 "stvzdzdplo",
　　　 "ftrmgkauna",
　　　 "ackzqxlchf",
　　　 "dqttpisosm",
　　　 "psjhgorrem",
　　　 "kfcrgfxenb",
　　　 "vwappsvdld",
　　　 "gvovlddccr",
　　　 "ybaoyevbsl",
　　　 "thhujdjaqk",
　　　 "luxrfzmlyz",
　　　 "zpewohxhvc",
　　　 "whcddsgogv",
　　　 "hzyjmgrbxw",
　　　 "mjmxnxawrw",
　　　 "hdndjktido",
　　　 "vymqiltdzq"

○ 0620 文字列のリストを降順にソートする - ソートロジックは自作
　　 テストデータは以下を使用する
　　　 "emhjopwxaz",
　　　 "ykxfjihxvv",
　　　 "oqsuoeojku",
　　　 "stvzdzdplo",
　　　 "ftrmgkauna",
　　　 "ackzqxlchf",
　　　 "dqttpisosm",
　　　 "psjhgorrem",
　　　 "kfcrgfxenb",
　　　 "vwappsvdld",
　　　 "gvovlddccr",
　　　 "ybaoyevbsl",
　　　 "thhujdjaqk",
　　　 "luxrfzmlyz",
　　　 "zpewohxhvc",
　　　 "whcddsgogv",
　　　 "hzyjmgrbxw",
　　　 "mjmxnxawrw",
　　　 "hdndjktido",
　　　 "vymqiltdzq"


□ 日付系

○ 0710 本日の日付を取得し "YYYY/MM/DD 曜日"の形式で表示する

○ 0720 整数のyyyy,mm,ddからCalendarオブジェクトを生成する

○ 0730 前日を求める
　　 テストは、2015/03/01と2016/03/01で行う

○ 0740 YYYY/MM/DDの形式の文字列からDateオブジェクトを生成する


□ 文字列系-上級

○ 1010 文字列検索
　　　二つの文字列配列arrayAとarrayBがあり、次のメソッドを作成
　　　boolean containsOne(String[] arrayA,String[] arrayB)
　　　arrayAの文字列のどれか一つ(以上)がarrayBの中にあればtrue
　　　以外はfalse

　　　arrayBのテストデータ
　　　 "ABC","DEF","GHI","JKL","MNO","PQR"
　　　arrayAのテストデータ
　　　 "DEF","YYY","ZZZ"　⇒ true
　　　 "DEF","GHI"　　　　⇒ true
　　　 "XXX","YYY","ZZZ"　⇒ false

○ 1020 文字列検索
　　 二つの文字列配列arrayAとarrayBがあり、次のメソッドを作成
　　 boolean containsAll(String[] arrayA,String[] arrayB)
　　 arrayAの文字列のすべてがarrayBの中にあればtrue
　　 以外はfalse

　　 arrayBのテストデータ
　　　 "ABC","DEF","GHI","JKL","MNO","PQR"
　　 arrayAのテストデータ
　　　 "DEF","GHI","MNO"　⇒ true
　　　 "GHI",MNO","XXX"　 ⇒ false
　　　 "XXX","YYY","ZZZ"　⇒ false

○ 1030 文字列検索
　　 二つの文字列配列arrayAとarrayBがあり、次のメソッドを作成
　　 boolean notContainsOne(String[] arrayA,String[] arrayB)
　　 arrayAの文字列のどれか一つ以上がarrayBの中にない場合にtrue
　　 以外はfalse

　　 arrayBのテストデータ
　　　 "ABC","DEF","GHI","JKL","MNO","PQR"
　　 arrayAのテストデータ
　　　 "DEF","GHI","JKL" ⇒ false
　　　 "DEF","GHI","XXX" ⇒ true
　　　 "XXX","YYY","ZZZ" ⇒ true

○ 1040 文字列検索
　　 二つの文字列配列arrayAとarrayBがあり、次のメソッドを作成
　　 boolean notContainsAll(String[] arrayA,String[] arrayB)
　　 arrayAの文字列のすべてがarrayBの中にない場合にtrue
　　 以外はfalse

　　 arrayBのテストデータ
　　　 "ABC","DEF","GHI","JKL","MNO","PQR"
　　 arrayAのテストデータ
　　　 "DEF","GHI","JKL" ⇒ false
　　　 "DEF","GHI","XXX" ⇒ false
　　　 "XXX","YYY","ZZZ" ⇒ true

○ 1050 シーザー暗号
　シーザー暗号で作成された以下の文章を解読するプログラムを作成する
　原文は英大文字、英小文字、スペース、ピリオドから構成され、"apartment"という単語が含まれている
　シーザー暗号:アルファベットを指定数字だけ動かして暗号化する
　例: "IBM"を-1だけ動かすと"HAL"
　問題文は、Zの次はA、zの次はaとして動かしている、ピリオド、スペースはもとのまま

"Xnslqj Bmnyj Kjrfqj ktqqtbx ymj qnkj tk f btrfs ymfy pnhpx mjw gtdkwnjsi tzy tk mjw ybt gjiwttr fufwyrjsy. Ymjs xmj knsix f sjwid xmd wttrrfyj yt xuqny ymj wjsy bnym."



□ Map系-上級

○ 2010 Mapのすべての値を取り出して表示する
　 テストデータは以下を使用する
　　 "aaa"　-> "xxx"
　　 "bbb"　-> "yyy"
　　 "ccc"　-> null
　　 "ddd"　-> "zzz"
　　 "eee"　-> null

○ 2020 値がnullのものが取り除ぞかれた新しいMapを作成する
　 Map<String,String> removeNull(Map<String,String> map)
　 テストデータは以下を使用する
　　 "aaa"　-> "xxx"
　　 "bbb"　-> "yyy"
　　 "ccc"　-> null
　　 "ddd"　-> "zzz"
　　 "eee"　-> null

○ 2030 値がnullのキーを取り出す
　 Set<String> nullData(Map<String,String> map)
　 テストデータは以下を使用する
　　 "aaa"　-> "xxx"
　　 "bbb"　-> "yyy"
　　 "ccc"　-> null
　　 "ddd"　-> "zzz"
　　 "eee"　-> null

○ 2040 Mapから値が重複しているデータのみを取り出したMapを作成する
　 元のmapはそのままで新しいmapを作成
　 テストデータは以下を使用する
　　 "aaa"　-> "xxx"
　　 "bbb"　-> "yyy"
　　 "ccc"　-> "xxx"
　　 "ddd"　-> "zzz"
　　 "eee"　-> "yyy"

○ 2050 Mapの値とキーが逆転したMapを作成する
　 元のmapはそのままで新しいmapを作成
　 テストデータは以下を使用する
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"

○ 2060 Mapの中で使われた値の回数を表示する
　 テストデータは以下を使用する
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　　 "fff"　-> "333"
　　 "ggg"　-> "222"
　　 "hhh"　-> "333"

○ 2070 Mapの中で一番多く使われた値の回数とキーを表示する
　 テストデータは以下を使用する
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　　 "fff"　-> "333"
　　 "ggg"　-> "222"
　　 "hhh"　-> "333"

○ 2080 key0とkey1の値を交換する
　 元のmapはそのままで新しいmapを作成
　Map<String,String> reverse(Map<String,String> map,String key0,String key1)
　 キー"bbb"と"ddd"の値を交換
　 テストデータは以下を使用する
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"

○ 2090 map0とmap1のAND、キーが共通なものを取り出す、値は気にしなくて良い
　 元のmapはそのままで新しいmapを作成
　Map<String,String> and(Map<String,String> map0,Map<String,String> map1)
　 テストデータは以下を使用する
　 map0
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　 map1
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "fff"　-> "555"
　　 "ggg"　-> "666"


○ 2100 map0とmap1のOR、キーがどちらかにあるものを取り出す、値は気にしなくて良い
　元のmapはそのままで新しいmapを作成
　Map<String,String> or<Map<String,String> map0,Map<String,String> map1)
　 テストデータは以下を使用する
　 map0
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　 map1
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "fff"　-> "555"
　　 "ggg"　-> "666"


○ 2110 map0とmap1のXOR、キーが共通でないものを取り出す
　 元のmapはそのままで新しいmapを作成
　Map<String,String> xor(Map<String,String> map0,Map<String,String> map1)
　 テストデータは以下を使用する
　 map0
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　 map1
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "fff"　-> "555"
　　 "ggg"　-> "666"

○ 2120 map0からmap1を引く
　・map0からmap1に存在するキーを引く
　・map1に存在してmap0に存在しないキーは無視してよい
　 元のmapはそのままで新しいmapを作成
　Map<String,String> subtract(Map<String,String> map0,Map<String,String> map1)

　 テストデータは以下を使用する
　 map0
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　 map1
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "fff"　-> "555"
　　 "ggg"　-> "666"


○ 2130 map0とmap1が等しいかを判定する、キーと値がすべて等しい場合に両方が等しいと判断する
　boolean equals(Map<String,String> map0,Map<String,String> map1)
　 テストデータは以下を使用する - テストケース1
　 map0
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　 map1
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　 テストデータは以下を使用する - テストケース2
　 map0
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　 map1
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "zzz"
　　 "eee"　-> "555"
　 テストデータは以下を使用する - テストケース3
　 map0
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　 map1
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "zzz"　-> "555"
　 テストデータは以下を使用する - テストケース4
　 map0
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　 map1
　　 "aaa"　-> "111"
　　 "bbb"　-> "222"
　　 "ccc"　-> "333"
　　 "ddd"　-> "444"
　　 "eee"　-> "555"
　　 "fff"　-> "666"

□ List系-上級

○ 2510 list1の要素がすべてlist0に含まれるか判定する
　boolean containsAll(List<String> list0,List<String> list1)
　テストデータは以下を使用する - テストケース1
　list0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　list1
　　"bbb"
　　"ccc"
　　"ddd"
　テストデータは以下を使用する - テストケース2
　list0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　list1
　　"bbb"
　　"ccc"
　　"ddd"
　　"zzz"

○ 2520 list1の要素のどれかがlist0に含まれるか判定する
　boolean containsAny(List<String> list0,List<String> list1)
　テストデータは以下を使用する - テストケース1
　list0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　list1
　　"bbb"
　　"ccc"
　　"ddd"
　テストデータは以下を使用する - テストケース2
　list0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　list1
　　"xxx"
　　"yyy"
　　"zzz"

○ 2530 listの中に含まれるnull値のインデックスを戻す
　List<Integer> nullIndex(List<String> list)
　テストデータは以下を使用する - テストケース1
　　"aaa"
　　"bbb"
　　null
　　"ccc"
　　null
　　"ddd"
　　"eee"


○ 2540 listの中の重複要素を取り除き、一つだけを残す
　List<String> uniq(List<String> list)
　テストデータは以下を使用する - テストケース1
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"bbb"
　　"ddd"
　　"bbb"
　　

○ 2550 list0からlist1の要素を取り除いたリストを戻す
　元のリストは、そのままで、新しいリストを作成する
　list1に存在してlist0に存在しない要素は無視してよい
　List<String> subtract(List<String> list0,List<String> list1)
　テストデータは以下を使用する
　list0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　list1
　　"aaa"
　　"bbb"
　　"zzz"


○ 2560 list1の要素が一つでもlist0に含まれない場合にtrueを戻す
　boolean notContainsAny(List<String> list0,List<String> list1)
　テストデータは以下を使用する - テストケース1
　list0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　list1
　　"aaa"
　　"bbb"
　　"ccc"
　テストデータは以下を使用する - テストケース2
　list0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　list1
　　"aaa"
　　"bbb"
　　"zzz"

○ 2570 list1の要素がすべてlist0に含まれない場合にtrueを戻す
　boolean notContainsAll(List<String> list0,List<String> list1);
　テストデータは以下を使用する - テストケース1
　list0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　list1
　　"aaa"
　　"bbb"
　　"zzz"
　テストデータは以下を使用する - テストケース2
　list0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　list1
　　"xxx"
　　"yyy"
　　"zzz"

○ 2580 Listに入っているデータのうち、nullと重複値を除いた新しいリストを作成する
　テストデータは以下を使用する
　　"aaa"
　　"bbb"
　　null
　　"ccc"
　　"bbb"
　　"ddd"
　　"bbb"
　　null
　　"eee"

○ 2590 Listに入っているあるデータのうち、最大の重複数を持つデータとその重複数を調べる
　テストデータは以下を使用する
　　"aaa"
　　"bbb"
　　"ccc"
　　"bbb"
　　"ddd"
　　"bbb"
　　"eee"
　　"ccc"

□ Set系-上級

○ 3010 Setに同じ値が入れられるかどうか確認する

○ 3020 Setにnullが入れられるかどうか確認する

○ 3030 set1の要素がすべてset0に含まれるか判定する
　boolean containsAll(Set<String> set0,Set<String> set1)
　テストデータは以下を使用する - テストケース1
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"ccc"
　　"ddd"
　　"eee"
　テストデータは以下を使用する - テストケース2
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"ccc"
　　"ddd"
　　"eee"
　　"zzz"

○ 3040 set1の要素のどれかがset0に含まれるか判定する
　boolean containsAny(Set<String> set0,Set<String> set1)
　テストデータは以下を使用する - テストケース1
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"ccc"
　　"ddd"
　　"eee"
　テストデータは以下を使用する - テストケース2
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"xxx"
　　"yyy"
　　"zzz"


○ 3050 set0とset1のAND
　Set<String> and(Set<String> set0,Set<String> set1)
　テストデータは以下を使用する - テストケース1
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"ccc"
　　"ddd"
　　"xxx"
　　"yyy"
　テストデータは以下を使用する - テストケース2
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"xxx"
　　"yyy"
　　"zzz"


○ 3060 set0とset1のOR
　Set<String> or(Set<String> set0,Set<String> set1)
　テストデータは以下を使用する - テストケース1
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"ccc"
　　"ddd"
　　"xxx"
　　"yyy"


○ 3070 set0とset1のXOR
　Set<String> xor<Set<String> set0,Set<String> set1)
　テストデータは以下を使用する - テストケース
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"ccc"
　　"ddd"
　　"xxx"
　　"yyy"


○ 3080 set0からset1の要素を取り除いたSetを戻す
　set1に含まれ、set0に含まれない要素は無視してよい
　Set<String> substract(Set<String> set0,Set<String> set1)
　テストデータは以下を使用する
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"ccc"
　　"ddd"
　　"xxx"
　　"yyy"


○ 3090 set0の要素が一つでもset1に含まれない場合はtrueを戻す
　boolean notContainsAny(Set<String> set0,Set<String> set1)
　テストデータは以下を使用する - テストケース1
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"ccc"
　　"ddd"
　　"xxx"
　　"yyy"
　テストデータは以下を使用する - テストケース2
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"aaa"
　　"bbb"


○ 3100 set0の要素がすべてset1に含まれない場合はtrueを戻す
　boolean notContainsAll(Set<String> set0,Set<String> set1)
　テストデータは以下を使用する - テストケース1
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"ccc"
　　"ddd"
　　"xxx"
　　"yyy"
　テストデータは以下を使用する - テストケース2
　set0
　　"aaa"
　　"bbb"
　　"ccc"
　　"ddd"
　　"eee"
　　"fff"
　set1
　　"xxx"
　　"yyy"


□ ソート系-上級


○ 4010 氏名と住所(都道府県のみ)をもつPersonクラスを作成し、PersonクラスのComparatorクラスを作成して、次を行う
　　 ・氏名の昇順でソート
　　 ・氏名の降順でソート
　　 ・住所の昇順でソート
　　 ・住所の降順でソート
　　 ・住所の降順⇒氏名の降順でソート

○ 4020 3002と同じことをPersonにCompableを実装することによって行う


□ 総合問題


○ 9010 会議室予約確認 

/** 会議室情報クラス */
class Room {
　private int id; // 会議室ID
　private int number; // 定員
}
//** 予約情報クラス */
class ReserveInfo {
　int roomId;　// 会議室ID
　int timeId;　// 時間ID
}
/** 会議室リスト */
private List<Room> roomList;
/** 予約情報リスト */
private List<ReserveInfo> reserveList;

・以上の情報を元に以下のメソッドを作成する

/** 指定時間に空いている会議室を調べる */
public List<Integer> findRoom(int timeId);

/** 指定時間帯で一番定員が多い会議室を調べる */
public int findLargestRoom(int fromTimeId,int toTimeId);



○ 9020 航空路の探索
  
　以下のような配列で、複数の空港間の経路が定義されている

String[][] routes {
　{"出発地","目的地"},
　{"出発地","目的地"},
　{"出発地","目的地"},
}

/** 目的地までの航空路をすべて探索する */
public List<List<Strring>> findRoutes(String start,String target);



○ 9030 部品構成問題

/** 部品構成クラス */
class Part {
　// 製品ID
　private int id;
　// 部品構成
　// 当該製品を構成する部品 製品ID->必要数のMap
　// partsがnullならば下位部品はない(外部から購入する)
　private Map<Integer,Integer> parts; 
　// 製造期間(または納入期間)
　private int leadTime;
}
/** 発注情報 */
class Order {
　private int id;　// 部品ID
　private int cnt; // 発注数
　private int date; // (製品の完成時期から見た)発注時期
}
// 製品(部品)の一覧
private List<Part> partList;

・背景説明
　・製品を組み立てる工場がある
　・製品は、複数の部品から構成される
　・部品には、当該工場で組み立てるもの(中間製品)と、外部から購入するものがある
　・組み立てる部品の複数の部品から構成される
　・製品と組み立てる部品には、組立に必要な期間がある
　　・注、単純化して個数には依存しないとする
　・購入する部品には、発注してから納入されるまでの期間(納期)がある

・以上の情報を元に以下のメソッドを作成する

/**
 * 指定の部品を使っている製品の一覧を求める
 * 「製品」とは、それを使っている製品がないもの
 */
public List<Integer> findProduct(int partId);

/**
 * 指定の製品を生産するのに必要な部品の情報を求める
 * 「部品」とは外部より購入するもの
 * 求める情報は部品ID、必要数、発注納期
 * 注、発注納期は複数ありうるが、一番早いものを求める
 */
public List<Order> createOrderList(int productId);

/**
 * 部品が一つも存在しない状態で、ある製品を完成するまでの日数を求める
 */
public int computePeriod(int productId);


○ 9040 部品構成問題-続き

Partクラスに以下の情報を付け加える

　int min;　 // 最少製造(発注)数

製品(中間製品)を製造する場合は、必要数がそれ以下であっても、この数量の単位で製造する
部品を発注する場合は、必要数がそれ以下であっても、この数量の単位で発注する

/**
 * 指定の製品を指定個数だけ生産するのに必要な部品の情報を求める
 * 「部品」とは外部より購入するもの
 * 求める情報は部品ID、必要数、発注納期
 * 発注納期は複数個/**
 * 指定の製品を生産するのに必要な部品の情報を求める
 * 「部品」とは外部より購入するもの
 * 求める情報は部品ID、必要数、発注納期
 * 注、発注納期は複数ありうるが、一番早いものを求める
 */
public List<Order> createOrderList(int productId,int cnt);



==== ended