paizaラーニングのレベルアップ問題集「Bランクレベルアップセット」からの出典です。
paiza.jp
「占い」問題集と、それらの提出コードの解答例です。
僕が作成、提出したコードは、以下のとおりです。
・STEP: 1 連想配列(辞書)を使う
「ユーザー」と「ユーザーに対応する血液型」を連想配列(辞書)として定義して、それらのキーと値のペアを順に出力してください。
/* Javaによる「占い」問題集 STEP: 1 連想配列(辞書)を使う https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ import java.util.LinkedHashMap; import java.util.Map; public class Main { public static void main(String[] args) { LinkedHashMap<String, String> hm = new LinkedHashMap<>(); hm.put("Kyoko", "B"); hm.put("Rio", "O"); hm.put("Tsubame", "AB"); hm.put("KurodaSensei", "A"); hm.put("NekoSensei", "A"); for(Map.Entry<String, String> entry : hm.entrySet()){ System.out.println(entry.getKey() + " " + entry.getValue()); } } }
・STEP: 2 ユーザーの血液型のデータ処理
n 行のユーザーと血液型の組が与えられるので、ユーザーをキー、血液型を値として、連想配列(辞書)に保存してください。
そのあとで連想配列(辞書)をそのまま表示してください。
/* Javaによる「占い」問題集 STEP: 2 ユーザーの血液型のデータ処理 https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ import java.util.LinkedHashMap; import java.util.Map; import java.util.Scanner; public class Main { public static void main(String[] args) { LinkedHashMap<String, String> hm = new LinkedHashMap<>(); Scanner sc = new Scanner(System.in); String N = sc.nextLine(); int n = Integer.parseInt(N); for(int i = 0; i < n; i++) { String foo = sc.next(); String bar = sc.next(); hm.put(foo,bar); } for(Map.Entry<String, String> entry : hm.entrySet()){ System.out.println(entry.getKey() + " " + entry.getValue()); } } }
・STEP: 3 1人の血液型
1行目でユーザーが1つ与えられます。
n 行のユーザーと血液型の組が与えられるので、ユーザーをキー、血液型を値として、連想配列(辞書)に保存してください。
その連想配列(辞書)の中で1行目で与えられたユーザー名と、ユーザー名に対応する血液型を表示してください。
/* Javaによる「占い」問題集 STEP: 3 1人の血液型 https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ import java.util.LinkedHashMap; import java.util.Scanner; public class Main { public static void main(String[] args) { LinkedHashMap<String, String> hm = new LinkedHashMap<>(); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); String N = sc.nextLine(); int n = Integer.parseInt(N); for(int i = 0; i < n; i++) { String foo = sc.next(); String bar = sc.next(); hm.put(foo,bar); } System.out.println(str + " " + hm.get(str)); } }
・STEP: 4 1つの血液型を占う
1行目で血液型が1つ与えられます。
m 行の血液型と占い結果の組が与えられるので、血液型をキー、占い結果を値として、連想配列(辞書)に保存してください。
その後、1行目で与えられた血液型に対応する占い結果を表示してください。
/* Javaによる「占い」問題集 STEP: 4 1つの血液型を占う https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ import java.util.LinkedHashMap; import java.util.Scanner; public class Main { public static void main(String[] args) { LinkedHashMap<String, String> hm = new LinkedHashMap<>(); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); while(sc.hasNext()) { String foo = sc.next(); String bar = sc.next(); hm.put(foo,bar); } System.out.println(hm.get(str)); } }
・STEP: 5 1人の占い結果
最初に「ユーザー」 U が1つ与えられます。
続いて n 人の「ユーザー」と「ユーザーに対応する血液型」が与えられます。
続いて m 種類の「血液型」と「血液型に対応する占い結果」が与えられます。
与えられたユーザー U に対応する占い結果を表示してください。
入力例の1つ目は、ユーザーの血液型についてのラッキーカラーの占いです。
入力例の2つ目は、ユーザーの星座についてのラッキーパーソンの占いになっています。
「血液型」として「星座」などのさまざまな文字列を利用できるようにすることで、他の占いにも対応する必要があることに注意してください。
/* Javaによる「占い」問題集 STEP: 5 1人の占い結果 https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ import java.util.LinkedHashMap; import java.util.Scanner; public class Main { public static void main(String[] args) { LinkedHashMap<String, String> hm1 = new LinkedHashMap<>(); LinkedHashMap<String, String> hm2 = new LinkedHashMap<>(); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); String N = sc.nextLine(); int n = Integer.parseInt(N); for(int i = 0; i < n; i++) { String[] foo = sc.nextLine().split(" "); hm1.put(foo[0],foo[1]); } String M = sc.nextLine(); int m = Integer.parseInt(M); for(int i = 0; i < m; i++) { String[] bar = sc.nextLine().split(" "); hm2.put(bar[0],bar[1]); } System.out.println(hm2.get(hm1.get(str))); } }
・FINAL問題: 占い
「ユーザー」と「ユーザーに対応する血液型」、「血液型」と「血液型に対応する占い結果」が与えられます。
それぞれのユーザーに対応する占い結果を表示してください。
入力例の1つ目は、ユーザーの血液型についてのラッキーカラーの占いです。
入力例の2つ目は、ユーザーの星座についてのラッキーパーソンの占いになっています。
「血液型」として「星座」などのさまざまな文字列を利用できるようにすることで、他の占いにも対応する必要があることに注意してください。
/* Javaによる「占い」問題集 FINAL問題: 占い https://paiza.jp/works/mondai 提出コードの解答例 https://neguse-atama.hatenablog.com */ import java.util.LinkedHashMap; import java.util.Scanner; public class Main { public static void main(String[] args) { LinkedHashMap<String, String> hm1 = new LinkedHashMap<>(); LinkedHashMap<String, String> hm2 = new LinkedHashMap<>(); Scanner sc = new Scanner(System.in); String N = sc.nextLine(); int n = Integer.parseInt(N); for(int i = 0; i < n; i++) { String[] foo = sc.nextLine().split(" "); hm1.put(foo[0],foo[1]); } String M = sc.nextLine(); int m = Integer.parseInt(M); for(int i = 0; i < m; i++) { String[] bar = sc.nextLine().split(" "); hm2.put(bar[0],bar[1]); } for(String key1 : hm1.keySet()) { System.out.println(key1 + " " + hm2.get(hm1.get(key1))); } } }
HashMap とか LinkedList ではなくて、LinkedHashMap クラスを使うことで挿入した順番を保持できます。
paizaラーニングのレベルアップ問題集については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
また授業や研修、教材などにも利用できるそうです。