Java初心者が実行したコードでYESと表示されることを期待したがNOと表示される理由は?

このQ&Aのポイント
  • Java初心者が作成したコードでYESと表示されることを期待したがNOと表示される理由を解説します。
  • 標準入力に'A'と'A'を入力して実行した際、作成したコードでYESと表示されることを期待したがNOと表示される理由は何でしょうか?
  • Java初心者が作成したコードでYESと表示されることを期待したがNOと表示される理由とは?
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.1

この部分が誤りです。 if (data == str) { Stringオブジェクト同士の比較に==を使うと、ほとんどの場合に意図した動作になりません。equals()メソッドを使ってください。 String以外の場合でも、オブジェクト同士を比較するときは==とequals()の使い分けに注意が必要です。

hirapiro
質問者

お礼

そうなんですか! まったく知りませんでした。 勉強になりました、ありがとうございます(^^)

関連するQ&A

  • 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の超初心者です。ご教授いただけたら幸いです。

    javaの超初心者です。ご教授いただけたら幸いです。 ある書籍を元にやっているのですが、演習に答えがなく、わからないためその問題をお願い致します。 2桁の整数値(10~99)を当てさせる数当てゲームを作成せよ。という問題です。 下記は少しやってみました。 import java.util.Random; import java.util.Scanner; class Kazuate99 { public static void main(String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in);    int no = rand.nextInt(); ← ここがたぶん違う System.out.println("数当てゲーム開始!!"); System.out.println("10~99の数を当てて下さい。"); int x; // プレーヤが入力した数 do { System.out.print("いくつかな : "); x = stdIn.nextInt(); if (x > no) System.out.println("もっと小さな数だよ。"); else if (x < no) System.out.println("もっと大きな数だよ。"); } while (x != no ); System.out.println("正解です。"); } } 宜しくお願い致します。

    • ベストアンサー
    • Java
  • java練習

    import java.util.Scanner; class test { public static void main (String[ ] args) throws IOException { System.out.println("文章を入力してください。"); BufferedReader input = new BufferedReader (new InputStreamReader (System.in)); String str = input.readLine( ); if (str == A) { str ="10"; } else if (str == 64) { str ="100"; } else if (str == 3E8) { str ="1000"; } else if (str == FF) { str ="255"; } else if (str == 100) { str ="256"; } System.out.println(" str + "); } } 今プログラミングの練習で文字や数字を判別するプログラムを作っています。 とりあえず16進数を入力したら10進数に変換されるプログラムを書いてたんですけどコンパイルしたらどうしてもエラーが出てきてしまいます。 調べてもよくわかりません、助けてください。

  • 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について

    現在JAVAについて学んでいるのですが、下記のソースが実行出来ません。どなたかわかる方、回答宜しくお願いいたします。 public class Lound { void main(String[] args) { String rtn = methWithParamReturn(3); if(rtn.equals("0")) System.out.println("0あかんよ"); else System.out.println(rtn); } public String methWithParamReturn(int x) { System.out.println(x); x= x*x; String str = String.valueOf(x); return str; } }

  • かなり初歩的なプログラミング(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
  • 考えてもちっとも出て来なくって・・・

    javaの問題が分からないです キーボード入力で0から100までの間任意の数字を入力し「!」を入力した時点終了する 終了時点で最大値、最小値、平均値を求める ソースコードはここまでです↓ class Toukei { public static void main(String[] args){ System.out.println("キーボードから整数(0から100迄)を入力してください"); String str=""; List list=new ArrayList(); while(true){//処理「!」が入力されたら終了 Scanner sc=new Scanner(System.in); str =sc.next(); if(str.equals("!")){ break; } list.add(str); } } } とりあえずlistに値が打った分だけ入っていきます。 けどここからどうやって求めたらいいのかわからないです。 お優しいかた考え方でも良いので助言をお願いします。

    • ベストアンサー
    • Java
  • java eclipse キーボード入力

    今eclipse javaでキーボード入力のプログラムを作ってるのですが エラーがあって困ってるので誰かご指摘できる方が入ればよろしくお願いします。 以下ソース import java.io.BufferedReader; public class test1 { public static void main(String args[]){ System.out.println("文字を入力して下さい。"); Scanner scan = new Scanner(System.in);//エラー箇所「Scanner」二点 String str = scan.next(); System.out.println("最初のトークンは: "+ str); str = scan.next(); System.out.println("次のトークンは : "+ str); } } エラーメッセージは Exception in thread "main" java.lang.Error: Unresolved compilation problems: Scanner cannot be resolved to a type Scanner cannot be resolved to a type at test1.main(test1.java:8) エラーメッセージを日本語にすると「筋道の中に例外がある。未解決の編集物が問題」だと勝手に解釈してますがエラー対処がわかる方が入れば何卒よろしくお願いします。 カレントディレクトリは多分 HelloWorld/src/default package/test1です。 他にクラスは今の所ないので何が原因か掴めないでいますので 応えられる方がいればよろしくお願いします。

  • [至急!]Javaのプログラミング

    野球のBSOカウンタを作ろうとしているのですが、エラーが出ないもののうまく動きません。動作としてはsと入力したらSのカウンタに「〇」を表示、といったことをO(アウト)カウンタが3つになるまで行うプログラムなのですが、入力と出力の両方をうまくループすることが出来ません。分かる方がいたら教えてください。私が作ったものは下のものです。これを改良して作っていただけると助かります。 import java.io.*; public class test1 { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //String str=br.readLine(); //char hantei=str.charAt(0); int sc=0,bc=0,oc=0; while(oc<3){ String str=br.readLine(); char hantei=str.charAt(0); if(hantei=='s') { sc=sc+1; if(sc==3) oc=oc+1; sc=0; bc=0; } else if(hantei=='b') { bc=bc+1; if(bc==4) sc=0; bc=0; } else if(hantei=='o') { oc=oc+1; sc=0; bc=0; } else { System.out.println("入力が違います。"); } } System.out.print("B "); for(int i=0;i<=bc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("S "); for(int i=0;i<=sc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("O "); for(int i=0;i<=oc;i++){ System.out.print("〇"); } System.out.println(""); } } 出力例 s(入力) B S 〇 O s(入力) B S 〇〇 O s(入力) B S O 〇 これをアウトカウントが3つになるまで行うプログラムです。

    • ベストアンサー
    • Java
  • java プログラミングについて

    独学でjavaに挑戦中ですが、書店で購入した本のソースプログラムを少し変えたいのですが、ご教授をお願いします。数当てゲームのプログラムで、一つの設問を正解すると終了するゲームですが、複数の設問を設定したいのです、質問がうまく伝わるか不安ですがよろしくお願いします、プログラムを少しだけ書いておきます。 import java.io.*; class Mojiretuate { public static void main(String[] args) throws IOException { String str = "こんにちは";  /*質問箇所*/ String str2; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("文字列当てゲームです。"); System.out.println("答えは何かのあいさつです。"); for(;;){ System.out.println("\n入力:"); str2 = br.readLine(); System.out.println("入力文字列の長さ:" + str2.length()); if(str.equals(str2)){ System.out.println("正解です!"); break; } 

    • ベストアンサー
    • Java

専門家に質問してみよう