こんにちは。ECF Tech
ブログ担当 Michiharu.Tです。
Javaプログラミング向け練習問題、オブジェクト指向プログラミング編。今回のテーマはコレクションです。Java標準APIの持つクラスを使って実現する機能ですが、Javaを利用する際には欠かせません。リスト、セット、マップの基本的な利用を確認する問題と少し応用編の問題を作成しました。皆様のJava学習にお役立てください。
一般的なJavaの学習順序に沿ったテーマの一覧(※随時追加)は、こちらのリンクよりご確認頂けます。
Javaのトピックスです。主に初心者向けにプログラミング学習ネタを提供していきます。
解説動画
2023/07/13 解説動画を掲載しました。
問題編
Q001
問題
次の仕様に基づき、提供プログラムにコードを追記してください。
(仕様)
下のプログラムと同じ処理内容のプログラムをArrayListを用いて作成します。
public class ArraySample{ public static void main(String[] args) { String[] array = {"りんご","みかん","バナナ","ぶどう"}; for( int i = 0; i < array.length; i++ ){ System.out.println(array[i]); } } }
実行結果
りんご みかん バナナ ぶどう
提供コード
//必要なimportを行ないます。 public class Main{ public static void main(String[] args) { //ArrayListインスタンスを生成します。 //4つの要素を追加。addメソッドを使用します。 //拡張for文で各要素を表示します。 } }
Q002
問題
提供プログラムのコメントの指示に基づき、プログラムを作成してください。
提供プログラム
//必要なimportを行ないます。 public class Main{ public static void main(String[] args) { //HashSetインスタンスを生成し、Set型の変数setに代入します。 //扱う要素はString型です。 //addメソッドを使って、「りんご」「みかん」「バナナ」「ぶどう」 //の各文字列を要素として追加します。 //removeメソッドを使って「みかん」を削除します。 System.out.println(set); //containsメソッドを使って「バナナ」が含まれているかを判定し、trueかfalseを表示します。 //containsメソッドを使って「みかん」が含まれているかを判定し、trueかfalseを表示します。 } }
実行結果
[りんご, ぶどう, バナナ] true false
Q003
問題
次の仕様に基づき提供プログラムを追記し、実行結果を得てください。
(仕様)
- HashMapを使って科目とその得点を管理します。
- HashMapのキーを「科目名」(String型)、値を「得点」(Integer型)として扱います。
- 各科目と得点は次のとおりです。
- 国語:90点
- 数学:80点
- 英語:70点
提供プログラム
import java.util.Map; import java.util.HashMap; public class Main{ public static void main(String[] args) { //HashMapインスタンスを生成 //各科目の科目名と得点を要素として追加 //HashMapからkeySetを取り出し、拡張forで各科目の //科目名と得点を表示する。 } }
実行結果
国語:90 数学:80 英語:70
Q004
問題
次の仕様に基づきプログラムを作成してください。
(仕様)
MenuManagerクラスはファストフード店のメニューを管理するクラスです。MenuManagerはファストフードのメニューを次のように管理します。
図のようにメニューの種別をマップのキーとして持ち、その種別に該当するリストを値として持ちます。
提供コードのMenuManager.javaに次のメンバ変数、コンストラクタ、メソッドを作成します。
- メンバ変数を作成する
- メニューを種別ごとに情報として持つmapをjava.util.Map型で宣言する。キーはString型、値はArrayList
型で宣言する。宣言と同時にHashMapインスタンスを生成し、代入しておく。
- メニューを種別ごとに情報として持つmapをjava.util.Map型で宣言する。キーはString型、値はArrayList
- searchMenuメソッドを作成する
- 引数:
- menu:String型
- 戻り値:なし
- 処理内容:各種別のメニューから引数menuを検索し、見つかった場合は「xxxxはyyyyに含まれています。」と表示します(xxxxは引数menuの値、yyyyは種別を表示します)。また、いずれにも含まれない場合は「該当するメニューはありません。」と表示します。
- 引数:
- setMenuメソッドを作成する
- 引数:
- category:String型
- menu:String型
- 戻り値:なし
- 処理内容:引数menuの値をcategoryをキーにして取り出せるリストに追加します。
- 引数:
- showMenuメソッドを作成する
- 引数:
- category:String型
- 戻り値:なし
- 処理内容:引数categoryが示す種別のメニューをすべて表示します。ArrayListインスタンスをSystem.out.printlnで表示するだけです。
- 引数:
提供コード
(MenuManager.java)
import java.util.*; public class MenuManager{ //ここにメンバ変数を追加します。 //コンストラクタ MenuManager(){ //サンドイッチメニューの登録 ArrayList<String> list = new ArrayList<>(); list.add("ハンバーガー"); list.add("チーズバーガー"); list.add("ダブルチーズバーガー"); map.put("sandwitch",list); //ドリンクメニューの登録 list = new ArrayList<>(); list.add("コーラ"); list.add("オレンジジュース"); list.add("ミネラルウォーター"); map.put("drink",list); //サイドメニューの登録 list = new ArrayList<>(); list.add("フライドポテト"); list.add("チキンナゲット"); list.add("フレッシュサラダ"); map.put("sidemenu",list); } //ここにsearchMenuを作成します。 //ここにsetMenuを作成します。 //ここにshowMenuを作成します。 }
下のMain.javaをMenuManager.javaと同一のフォルダに配置してコンパイル、実行結果を得てください。
(Main.java)
public class Main{ public static void main(String[] args) { MenuManager manager = new MenuManager(); //サンドイッチメニューの表示 manager.showMenu("sandwitch"); //サンドイッチメニューにビッグバーガーを追加 manager.setMenu("sandwitch","ビッグバーガー"); //サンドイッチメニューの表示 manager.showMenu("sandwitch"); //「ホットミルク」をメニューから検索 manager.searchMenu("ホットミルク"); //「オレンジジュース」をメニューから検索 manager.searchMenu("オレンジジュース"); } }
実行結果
[ハンバーガー, チーズバーガー, ダブルチーズバーガー] [ハンバーガー, チーズバーガー, ダブルチーズバーガー, ビッグバーガー] 該当するメニューはありません。 オレンジジュースはdrinkに含まれています。
解答編
それでは、解答編です。
Q001
//必要なimportを行ないます。 import java.util.*; public class Main{ public static void main(String[] args) { //ArrayListインスタンスを生成します。 ArrayList<String> list = new ArrayList<>(); //4つの要素を追加。addメソッドを使用します。 list.add("りんご"); list.add("みかん"); list.add("バナナ"); list.add("ぶどう"); //拡張for文で各要素を表示します。 for(String data : list){ System.out.println(data); } } }
Q002
//必要なimportを行ないます。 import java.util.Set; import java.util.HashSet; public class Main{ public static void main(String[] args) { //HashSetインスタンスを生成し、Set型の変数setに代入します。 //扱う要素はString型です。 Set<String> set = new HashSet<String>(); //addメソッドを使って、「りんご」「みかん」「バナナ」「ぶどう」 //の各文字列を要素として追加します。 set.add("りんご"); set.add("みかん"); set.add("バナナ"); set.add("ぶどう"); //removeメソッドを使って「みかん」を削除します。 set.remove("みかん"); System.out.println(set); //containsメソッドを使って「バナナ」が含まれているかを判定し、trueかfalseを表示します。 System.out.println(set.contains("バナナ")); //containsメソッドを使って「みかん」が含まれているかを判定し、trueかfalseを表示します。 System.out.println(set.contains("みかん")); } }
Q003
import java.util.Map; import java.util.HashMap; public class Main{ public static void main(String[] args) { //HashMapインスタンスを生成 Map<String, Integer> map = new HashMap<>(); //各科目の科目名と得点を要素として追加 map.put("国語",90); map.put("数学",80); map.put("英語",70); //HashMapからkeysetを取り出し、拡張forで各科目の //科目名と得点を表示する。 for( String key: map.keySet() ){ System.out.println(key+":" + map.get(key)); } } }
Q004
import java.util.*; public class MenuManager{ Map<String, ArrayList<String>> map = new HashMap<>(); MenuManager(){ //サンドイッチメニューの登録 ArrayList<String> list = new ArrayList<>(); list.add("ハンバーガー"); list.add("チーズバーガー"); list.add("ダブルチーズバーガー"); map.put("sandwitch",list); //ドリンクメニューの登録 list = new ArrayList<>(); list.add("コーラ"); list.add("オレンジジュース"); list.add("ミネラルウォーター"); map.put("drink",list); //サイドメニューの登録 list = new ArrayList<>(); list.add("フライドポテト"); list.add("チキンナゲット"); list.add("フレッシュサラダ"); map.put("sidemenu",list); } //ここにsearchMenuを作成する。 void searchMenu(String menu){ for( String key: map.keySet() ){ if( map.get(key).contains(menu) ){ System.out.println(menu+"は"+key+"に含まれています。"); return; } } System.out.println("該当するメニューはありません。"); } //ここにsetMenuを作成する。 void setMenu(String category, String menu){ map.get(category).add(menu); } //ここにshowMenuを作成する。 void showMenu(String category){ System.out.println( map.get(category) ); } }
おわりに
本日は以上となります。最後までご覧くださりありがとうございます。コレクションを活用できると複雑なデータ処理にも対応しやすくなります。各クラスとも豊富な機能を備えていますので、ぜひ活用しましょう。ひきつづき、問題の提供をしていければと思っています。今後もよろしくお願いいたします。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。