質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

3回答

8453閲覧

英単語を入力すると、それに対応する日本語が出てくるようにしたいです。

ssssa

総合スコア39

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2018/09/27 15:09

Arraylistを使って以下のように表示したいです。

英語で動物の名前を入力してください:cat ← コンソールから英単語を入力
「猫」です。
英語で動物の名前を入力してください:dog ← コンソールから英単語を入力
「犬」です。
英語で動物の名前を入力してください:bird ← コンソールから英単語を入力
「鳥」です。
英語で動物の名前を入力してください:tiger ← コンソールから英単語を入力
「虎」です。

英語で動物の名前を入力してください:horse
対応するデータは登録されていません。となりたいです。

私の書いたコードは下記になります。

Java

1public static void main(String[] args) throws IOException { 2 Map<String, String> list = new HashMap<>(); 3 InputStreamReader isr = new InputStreamReader(System.in); 4 BufferedReader br = new BufferedReader(isr); 5 String buf; 6 7 while (true) { 8 9 System.out.print("英語で動物の名前を入力してください:"); 10 buf = br.readLine(); 11 list.put("cat", "猫です"); 12 list.put("dog", "犬です"); 13 list.put("bird", "鳥です"); 14 list.put("tiger", "虎です"); 15 16 if (buf.equals("")) { 17 System.out.println("対応するデータは登録されていません。"); 18 19 } 20 } 21 } 22 23 private static void showResult(Map<String, String> c1) { 24 for (Map.Entry<String, String> a : c1.entrySet()) { 25 System.out.println(a.getKey() + " : " + a.getValue()); 26 } 27 } 28} 29 30 31 32 33

結果通りにならず困っております。
大変申し訳ございません。ご教示願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

やりたいことを整理すると次になりますよね。

  1. 辞書を作る
  2. コンソールから入力する
  3. 入力した文字を辞書から探す
  4. 見つかった文字を表示する (見つからなかった場合は メッセージを表示)

それぞれ、できているかを確認しましょう。

辞書を作る処理

ssssaさんは、ArrayListでと言っていますが記載されているコードの中にはArrayListは存在していません。こういう1対1の変換は実装されているようにHashMapを使うのが良いのでHashMapを使うと理解してください。

お書きになったコードでHashMapなのに listという変数を使用していますが、見た人はArrayListであるかのように勘違いしてしまうので名は体を表すように dictionary とするのが良いでしょう。
また、 whileの中で何回もMap#putを呼んでいますが、辞書は最初に1回作ればよいのでwhileに入る前の変数宣言した直後に書けばよいです。

java

1Map<String, String> dictionary = new HashMap<>(); 2dictionary.put("cat", "猫です"); 3dictionary.put("dog", "犬です"); 4dictionary.put("bird", "鳥です"); 5dictionary.put("tiger", "虎です");

入力した文字列を辞書から検索して表示する処理

そもそも、作成した辞書に対して入力した文字を検索する処理が入っていないので求める処理になっていませんよね?

java

1while (true) { 2 System.out.print("英語で動物の名前を入力してください:"); 3 // コンソールから入力 4 buf = br.readLine(); 5 // ここで入力された文字は buf に入っているので 6 // これを上記で作成した辞書から検索すればよいですね 7 8 // Map#get("検索キー") とすればMapにキーがある場合はその値 9 // キーがない場合は NULL が返ってきます。 10 // Java8からは、Map#getOrDefault("検索キー","見つからなかった場合のデフォルト値") 11 // が使えます 12 13 System.out.println(ここに辞書から検索した文字を入れてみてください); 14}

あえて完成ソースは書きませんので、上記と下記のサイトをヒントに埋めてみてください。

【参考】

投稿2018/09/27 16:05

euledge

総合スコア2404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssssa

2018/09/27 16:16

euledge様:参考サイトありがとうございます。確認してみます。
opyon

2018/09/27 16:33

getOrDefault便利ですねif文が不要になりすっきりしました。
guest

0

ベストアンサー

@euledgeさんの回答を参考に修正
-修正箇所-
getOrDefaultに変更
listをmapに変更

java

1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4import java.util.HashMap; 5import java.util.Map; 6 7public class memo_qa148877 { 8 9 public static void main(String[] args) throws IOException { 10 Map<String, String> map = new HashMap<>(); 11 InputStreamReader isr = new InputStreamReader(System.in); 12 BufferedReader br = new BufferedReader(isr); 13 String buf; 14 15 //辞書追加 16 map.put("cat", "猫です"); 17 map.put("dog", "犬です"); 18 map.put("bird", "鳥です"); 19 map.put("tiger", "虎です"); 20 21 while (true) { 22 23 System.out.print("英語で動物の名前を入力してください:"); 24 buf = br.readLine(); 25 26 //終了判定 27 if (buf.equals("")) { 28 System.out.println("プログラムを終了します。"); 29 break; 30 } 31 32 //辞書判定 33 String str = map.getOrDefault(buf,"対応するデータは登録されていません。" ); 34 System.out.println(str); 35 } 36 } 37}

出力結果

英語で動物の名前を入力してください:cat 猫です 英語で動物の名前を入力してください:horse 対応するデータは登録されていません。 英語で動物の名前を入力してください:deer 対応するデータは登録されていません。 英語で動物の名前を入力してください: プログラムを終了します。

投稿2018/09/27 15:36

編集2018/09/27 16:32
opyon

総合スコア1009

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssssa

2018/09/27 16:15

opyon様:ご丁寧な対応ありがとうございます。参考にさせていただきます。
guest

0

opyon さんのコードを少し変更してみました。

  • 動物の名前の map に "です。” を含めないようにした。(getOrDefault の利用は諦めた)
  • map の値を宣言時に設定するようにした。

java

1package teratail; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6import java.util.HashMap; 7import java.util.Map; 8 9public class memo_qa148877 { 10 11 public static void main(String[] args) throws IOException { 12 @SuppressWarnings("serial") 13 Map<String, String> map = new HashMap<String, String>() { 14 { 15 put("cat", "猫"); 16 put("dog", "犬"); 17 put("bird", "鳥"); 18 put("tiger", "虎"); 19 } 20 }; 21 22 InputStreamReader isr = new InputStreamReader(System.in); 23 BufferedReader br = new BufferedReader(isr); 24 while (true) { 25 System.out.print("英語で動物の名前を入力してください:"); 26 String buf = br.readLine(); 27 if (buf.equals("")) { 28 System.out.println("プログラムを終了します。"); 29 break; 30 } 31 32 String ret = map.get(buf); 33 if (ret != null) { 34 System.out.println(ret + "です。"); 35 } else { 36 System.out.println("対応するデータは登録されていません。"); 37 } 38 } 39 } 40}

投稿2018/09/27 21:54

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問