なぜIDの中身が出力しないのか?

このQ&Aのポイント
  • 今回のコードでは、IDの中身が出力されない現象が発生しています。
  • コードの中でキーボード入力と指定のIDが等しい場合に、HashMap型のIDの中身を出力する処理が記述されています。
  • しかし、実際に実行してみると何も出力されず、エラーや例外処理も存在しないことが確認されています。
回答を見る
  • ベストアンサー

なぜIDの中身が出力しないんでしょうか?

今回もエラーもなく例外処理もありませんただ出力しないだけです キーボード入力と"20が等しいならHashMap型のIDの中身"山田"を表示、同様にキーボード入力と"10"が等しいならHashMap型のIDの中身"小林"を出力。 ソースコードはこちらです⇓ import java.util.HashMap; import java.util.*; class Sample7 { public static void main(String[] args){ System.out.println("IDを入れてください"); HashMap<String, String> ID=new HashMap<String,String>(); ID.put("20", "山田"); ID.put("10", "小林"); ID.put("40", "大林"); ID.put("90", "斉藤"); ID.put("1", "井上"); Scanner sc= new Scanner(System.in); String str=sc.nextLine(); while(true){ if(str=="20")//キーボド入力が20と等しいなら"山田"の出力する判定 System.out.println(ID.get(20)); break; } } } できたら早めの回答をお持ちしています

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#161640
noname#161640
回答No.1

str=="20" → "20".equals(str) とするとどうなりますか。

skybkird
質問者

お礼

実行するとnullが返ってきてしまいました どうしてかはわからないです

skybkird
質問者

補足

訂正します f("20".equals(str)にしてID.get(20);の部分をID.get("20")にすれば無事"山田"が返りました 初歩てきなミスでした 回答していただき有難うございました

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

突っ込みどころが2つ 1) Stringの比較は == ではなく equals で行うのです。 2) ID.get(20)); 20ではなく"20"では?

skybkird
質問者

お礼

その通りでした。 本当に初歩的なミスでした

関連するQ&A

  • Javaの初心者です

    Javaの勉強をしています。 以下のコードを作成しました。 import java.util.*; public class Main { public static void main(String[] args) { int flg = 0; Scanner sc = new Scanner(System.in); String str = sc.next(); String data = sc.next(); if (data == str) { flg = 1; } if (flg == 1) { System.out.println("YES"); } else { System.out.println("NO"); } } } 標準入力に A A を入力して実行しました。 YESと表示されるのを期待していたのですが、NOと表示されます。 何が悪いのでしょうか?

    • ベストアンサー
    • Java
  • かなり初歩的なプログラミング(Java)についての質問です。

    かなり初歩的なプログラミング(Java)についての質問です。 お恥ずかしながら、かなり初歩ではありますが躓いております・・・。 import java.util.Scanner; class OddEven{ public static void main(String args[]){ Scanner sc = new Scanner(System.in); System.out.println("整数を入力してください。"); String str1=sc.next(); int i = Integer.parseInt(str1); if(i%2==0){ System.out.println(i+"は偶数です。"); } else { System.out.println(i+"は奇数です。"); } } } } 以上のような内容なのですがコンパイルしようとすると 「OddEven.java:21: class、interface、または enum がありません。」 といったエラーがでます。 文法などは間違ってない!・・・と思うのですが・・・。 ご指摘していただきたいです。 あともう一つ質問です。じつはこっちが聞きたかったり・・・。 上記のソースコードを見ていただければわかると思いますが 「import java.util.Scanner;」 と最初の部分に記述していますが、これは授業で教師が教えてくれたもので手持ちの参考書では 「import java.io*;」 と記述されています。(もしかして今回のエラーもここから・・・?) この二つの違いは・・・聞いても正直分かりそうにはないので どっちを使っていけばいいか、などを教えていただきたいです。

    • ベストアンサー
    • Java
  • 間違っているところを教えて下さい

    次のプログラムの間違っているところを教えて下さい。 ************************************************************** package siryou; import java.io.*; import java.util.HashMap; class Meibo { private HashMap address; private HashMap age; public Meibo(String s) { address.put("yamada", "沖縄"); address.put("sato", "東京"); address.put("tanaka", "北海道"); address.put("ikeda", "アメリカ"); age.put("yamada", "21歳"); age.put("sato", "30歳"); age.put("tanaka", "55歳"); age.put("ikeda", "12歳"); } public String getAddress(String n) { String name = n; String jyuusyo = (String)address.get(name); return jyuusyo; } public String getAge(String n) { String name = n; String nennrei = (String)age.get(name); return nennrei; } } class MeiboMain { public static void main(String args[])throws IOException { System.out.println("名前を入力して下さい。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); Meibo mi = new Meibo(str); mi.getAddress(str); String jyuusyo = mi.getAddress(str); System.out.println(str + "さんの住所は" + jyuusyo + "です。"); mi.getAge(str); String nennrei = mi.getAge(str); System.out.println(str + "さんの年齢は" + nennrei + "です。"); } } *************************************************************** 恐らくコンストラクタ内の処理が間違っていると思うんですが・・・ 実行すると、「NullPointerException」が出てしまいます。 渡した引数の処理がちゃんと出来ていないのかな?と思った のですが、どういう風に記述してよいのか分からなくて。 また、メソッド内で 取得した値がnullだった場合、「未設定」という文字列を戻り値と する処理を記述したいのですが、どのように書いたら良いので しょうか?

    • ベストアンサー
    • Java
  • ArrayListとHashMapを利用する問題について

    『問題』 (1)ArrayListのオブジェクトを生成する。 (2)「何回入力しますか?」と出力し、入力処理を行う。 (3)(2)で入力された回数分、以下の処理を行う。   1)HashMapのオブジェクトを生成する。   2)「名前を入力して下さい。」と出力し、入力処理を行う。 3)「性別を入力して下さい。」と出力し、入力処理を行う。   4)「性別を入力して下さい。」と出力し、入力処理を行う。 5) 1)で作成したHashMapに、それぞれ入力された 名前・年齢・性別を設定する。   6)値を設定したHashMapを(1)で作成したArrayListへ格納する。 (4)ArrayListの件数分、以下の処理を行う。   1)ArrayListより、HashMapを取得する。   2)取得したHashMapより、それぞれ設定されている 名前・年齢・性別を取得する。   3)HashMapより取得した名前・年齢・性別を出力する。 『実行結果』 何回入力しますか? 2 名前を入力して下さい。 iwata 年齢を入力して下さい。 27 性別を入力して下さい。 men 名前を入力して下さい。 hana 年齢を入力して下さい。 21 性別を入力して下さい。 women 名前=iwata 年齢=27 性別=men 名前=hana 年齢=21 性別=women 上記のようなプログラムを書く問題について質問します。 (3)までは自力で書けて実行結果もこの通りになったのですが、 (4)が分からずに、実行結果では値の部分がnullと出力されて しまいました。自分でもこの記述は間違っているというのは感じる のですが、どうしたら値がちゃんと格納されるのか分かりません。 「ArrayListより、HashMapを取得する。」←特にこの部分を どう記述してよいのか・・・ 分かる方、上記の部分の記述方法だけでも構わないので教えて下さい。 『自分で書いたプログラム』 import java.util.*; import java.io.*; public class Sample02{ public static void main(String[] args)throws IOException{ ArrayList list = new ArrayList(); System.out.println("何回で入力しますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); for(int i=0; i<num; i++){ HashMap map = new HashMap(); System.out.println("名前を入力して下さい。"); String name = br.readLine(); System.out.println("年齢を入力して下さい。"); String age = br.readLine(); System.out.println("性別を入力して下さい。"); String sex= br.readLine(); map.put("名前", name); map.put("年齢",age); map.put("性別",sex); list.add(name); list.add(age); list.add(sex); } for(int i=0; i<num; i++){ HashMap map = new HashMap(); String name = (String)map.get("名前"); String age = (String)map.get("年齢"); String sex = (String)map.get("性別"); System.out.println("名前=" + name); System.out.println("年齢=" + age); System.out.println("性別=" + sex); } } }

    • ベストアンサー
    • Java
  • HashMapについて

    質問させてください 以下に簡単なコードをJBuilderで作成しました。 printでブレークをはってmapインスタンスを評価してみると、mapに20個のキーが登録されるはずが、 16個しかいません。 この時点でstr1[16]が評価しても表示されていないのですが、map.get()で正常に取得はできています。 どのようなことが考えられるか、わかる型がいましたら教えてください。よろしくお願いいたします。 import java.util.*; class Test { public static void main(String[]args){ HashMap map = new HashMap(); String str1[] = new String[20]; String str2[] = new String[20]; for(int i = 0; i < 20; i ++){ str1[i] = new String(Integer.toString(i)); str2[i] = new String(Integer.toString(i * 10)); map.put(str1[i],str2[i]); } System.out.println("デバック用ブレーク"); System.out.println(map.get(str1[11])); } }

    • ベストアンサー
    • Java
  • Scanner と BufferedReader

    javaでキーボードからの入力を格納するやつがあって、 Scanner と BufferedReaderのやり方がありますが、これはどう違うのでしょうか? それとも全く同じでしょうか? たとえば、 ■一つ目 import java.io.*; class Sample3{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("文字列を入力してください"); String str1=br.readLine(); System.out.println("検索文字を入力してください"); String str2=br.readLine(); char ch=str2.charAt(0); int num=str1.indexOf(ch); if(num !=-1) System.out.println(str1+"の"+(num+1)+"番目に「"+ch+"」が見つかりました"); else System.out.println(str1+"に「"+ch+"」はありません"); } } ■二つ目 import java.util.Scanner; class Sample4{ public static void main(String[] args){ Scanner stdIn=new Scanner(System.in); System.out.println("文字列を入力してください"); String str1=stdIn.nextLine(); System.out.println("検索文字を入力してください"); String str2=stdIn.nextLine(); char ch=str2.charAt(0); int num=str1.indexOf(ch); if(num !=-1) System.out.println(str1+"の"+(num+1)+"番目に「"+ch+"」が見つかりました"); else System.out.println(str1+"に「"+ch+"」はありません"); } } これら2つは全く同じ実行結果が得られると思うのですが、 Scanner と BufferedReader の使い分けるべき場合などあるのでしょうか?

    • ベストアンサー
    • Java
  • javaでif文を使ってわかりません

    javaでif文を使ってわかりません わからないのはキーボード入力で0なら「0です」と偶数・奇数ならそれぞれ偶数・奇数と表示するif文のプログラムです。 とりあえず import java.util.Scanner; public class OddEven2 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int str = sc.nextInt(); if(str==0) { System.out.println("0です"); } } } まではできました けど何億とある数字をキーボード入力で奇数なら奇数だけ表示させるとはどういうことでしょうか? 条件処理でこの値以上この値以下でなわけないし 糸口さえ掴めない状態です ヒントをいただけるとありがたいです

  • javaでCSVの中身から最大値を表示したい

    タイトルの通りなのですが、javaのプログラムでCSVの中の少数を読み込み、そこから最大値を表示したいのです。 CSVの中身は 10.1,20.2,30.3,40.4,50.4 100.1,200.2,300.3,400.4 という半角の少数がカンマで区切られた状態になっています。 import java.util.Scanner; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class test { public static void main(String args[]) throws NumberFormatException, IOException{ System.out.println("csvのファイル名を入力"); Scanner sc = new Scanner(System.in); String str = sc.next(); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(str))); String line; while((line=br.readLine())!=null){ String[] sp = line.split(","); double sum=0;//合計値格納用 for(int i=0;i<sp.length;i++){ sum += Double.parseDouble(sp[i]); } System.out.println(line+"の合計値は"+sum); } br.close(); } } 上記のプログラムは、CSVの中身の各行の合計値を算出するもので、これを元に各行の最大値を算出したいのですが、どうしても比較演算子を使用しての算出がうまくいきません。 どなたかプログラムに詳しい方がいましたら、ご教授いただけると助かります。 つたない文章ですがよろしくお願いします。

    • ベストアンサー
    • Java
  • 何故ループがしてくれないんですか?

    口でいうよりもソースコード載せた方が早いので載せます import java.util.Scanner; class StudentsList2 { public static void main(String[] args){ System.out.println("学生番号(23,45,78,51,9)を入力してください>"); Scanner sc=new Scanner(System.in); StList list=new StList(); list.ID=new int[]{23,45,78,51,9}; list.name=new String[]{"荒川","神田","吉田","渡辺","木村"}; int key=Integer.parseInt(sc.next()); list.getName(key); } static class StList{ public String[] name; public int[] ID; void getName(int key){ for(int A=0; A<ID.length; A++){ if(key==ID[0]){ System.out.println(name[0]);break; }else{ if(key==ID[1]){ System.out.println(name[1]);break; }else{ if(key==ID[2]){ System.out.println(name[2]);break; }else{ if(key==ID[3]){ System.out.println(name[3]);break; }else{ if(key==ID[4]){ System.out.println(name[4]);break; } } } } } } } } } 例外処理もなくエラーもかえって来ないんですが一回しか学生名が出力しないです。 何故でしょうか? nameに入っている名前を出力しないといけないですよね。 「ここがおかしいよ」とかのアドバイスをお願いします

    • ベストアンサー
    • Java
  • 複数行キーボード入力した後に再度入力する?

    複数行まとめてキーボードから入力を得た後に、再度入力を得たいのですが方法がわからず困っています。 whileループで複数行入力しCTRL_Dで入力終了、その後再度キーボード入力を得るようにコードを書きましたが、うまくいきません。 1、スキャナーを使用 public static void main(String[] args) {  Scanner sc = new Scanner(System.in);  List<String> list = new ArrayList<String>();  System.out.println("Enter several lines:");  while (sc.hasNextLine()) {   list.add(sc.nextLine());  }  System.out.println("\nEnter another line:");  String str = sc.nextLine();  // 上の位置で例外(NoSuchElementException)発生  System.out.println("Done!"); } 2、BufferedReaderを使用 // 例外は発生しないが、二回目の入力が不可 public static void main(String[] args) {  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  List<String> list1 = new ArrayList<String>();  System.out.println("Enter several lines:");  String str;  try {   while ((str = br.readLine())!=null) {    list1.add(str);   }   System.out.println("\nEnter another line:");   String line = br.readLine();   // ↑の位置でキーを何も押していないのに勝手にlineにnullが挿入され、   // Done!が出力される   System.out.println("Done!");  } catch (IOException e) { e.printStackTrace(); } } アドバイス宜しくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう