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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

4回答

4455閲覧

if文が実行されなくて困っています。

t_kuro9

総合スコア1

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2021/06/29 00:35

編集2021/06/29 04:56

前提・実現したいこと

Javaで2つの値(整数)と四則演算(+,-,*,/)の1つを入力して、その計算結果を表示するシステムを作っています。
自分で一通りコードを入力してみたのですが、if文のところだけが反映されません。実行されないことからエラーが起きていると思われるのですが、エラーメッセージが表示されないため解決に困っています。自分でサイト等を調べてみたのですが、なかなか効果的な方法が見つからなかったです。わかる方いましたらよろしくお願いいたします。

発生している問題・エラーメッセージ

問題:if文が実行されません。

該当のソースコード

Java

1// scannerを用いてキーボードから値を入力します。 2import java.util.Scanner; 3 4public class exe03 { 5 public static void main(String[] args){ 6 7 // int型の配列numを定義します。要素数は3です。 8 int[] num = new int[3]; 9 Scanner scanner = new Scanner(System.in); 10 11 System.out.println("求めたい計算式を入力してください.(ただし一つの演算のみ)"); 12 System.out.println("1つ目の値を入力してください."); 13 14 // 入力した値を定義した変数Aに代入し、そのAをnum[0]に代入します。 15 int A = scanner.nextInt(); 16 num[0] = A; 17 18 System.out.println("2つ目の値を入力してください."); 19 20 // 入力した値を定義した変数Bに代入し、そのBをnum[1]に代入します。 21 int B = scanner.nextInt(); 22 num[1] = B; 23 24 System.out.println("四則演算より1つ選んで入力してください."); 25 26 // 四則演算(+,-,*,/)の中から1つ選んで入力し、String型で定義した変数Cに代入します。 27 String C = scanner.next(); 28 29 scanner.close(); 30 31 // 入力した値をif文によって場合分けします。 32 // エラーメッセージも何も反応なく、ここが実行されなくて悩んでいます。 33 if(C == "+"){ 34 num[2] = num[0] + num[1]; 35 System.out.println(num[2]); 36 }else if(C == "-"){ 37 num[2] = num[0] - num[1]; 38 System.out.println(num[2]); 39 }else if(C == "*"){ 40 num[2] = num[0] * num[1]; 41 System.out.println(num[2]); 42 }else if(C == "/"){ 43 num[2] = num[0] / num[1]; 44 System.out.println(num[2]); 45 } 46 } 47}

試したこと

if文の直前と直後に記入したプログラムは実行されるのかを確認するために、以下の操作①②を行いました。

① scanner.close();の次の行に、
System.out.println(num[0]);
System.out.println(num[1]);
System.out.println(C);
の3つを入力して実行したところ、値を表示することができました。そのため、if文の直前のプログラムは実行されることがわかり、値が配列の各要素に入っていることは確認できました。

② if文の直後に、System.out.println("Hello World!");と入力して正しく実行されるかを確認しました。
その結果正しく実行されたため、if文の直後のプログラムはちゃんと読み込まれることがわかりました。

以上より、if文の直前と直後のプログラムは実行されることがわかりました。
しかしその間も、if文のプログラムだけは実行されずエラーメッセージも表示されません。

補足情報(FW/ツールのバージョンなど)

Visual Studio Codeを用いてプログラミングをしています。
バージョンは1.57.1です。
言語はJavaです。

追記(6/29)
ソースコードのコメントは実際のものではなく、提示するために手で入力したものです。

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

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

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

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

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

m.ts10806

2021/06/29 01:19

このままだとエラーが出ないはずがないです。コメント行が実際のものなのか提示するためだけに手で入れたものなのかこちらでは判断できませんので配慮願います
t_kuro9

2021/06/29 03:40

ご指摘ありがとうございます。 ソースコードのコメントは実際のものではなく、投稿の際に手で入力したものです。
m.ts10806

2021/06/29 04:40

質問は編集できます。 このままだとエラーの出るコードに対して「エラーは出ない」と言っていることになります。
m.ts10806

2021/06/29 04:40

特にコードはコピペで再現確認しますからね。
guest

回答4

0

ベストアンサー

全てのif文にマッチしないので、何も表示されません。
ifの最後にelseを書くと、全部elseに抜ける事が分かります。

文字列の比較はequalsメソッドで行います。
==を使用すると同じオブジェクトか(≠同じ文字列か)を判定するので
文字列の比較にはなりません。

投稿2021/06/29 00:44

Luice

総合スコア771

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

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

t_kuro9

2021/06/29 04:10

「==」だと文字列の中身を比較していることにならないのですね!初めて知りました... それと同時に、文字列の中身を比較するためにはequalsメソッドを用いるということを知りました。 コードを「C == "+"」から「C.equals("+")」に変更したところ、プログラムが動いて欲しい通りに動きました!回答ありがとうございました。
t_kuro9

2021/06/29 04:20

「==」に関して質問です。 「同じオブジェクトかどうかを判定するので文字列の比較になりません」とありますが、コンピュータのメモリのレベルで保存している場所を比較しているということでしょうか? 参考にしたサイトには、「文字列の比較ではなく、参照している文字列の場所の情報を比較しているという事になります。」とあるのですが、その意味があまり理解できていなくて... もしよろしければ回答をお願いしたいです。 (参考にしたサイト:https://techacademy.jp/magazine/15276)
退会済みユーザー

退会済みユーザー

2021/06/29 04:22

「C.equals("+")」は、Cがnullの時にNullPointerExceptionになります。 「"+".equals(C)」の方がいいですよ。
Luice

2021/06/29 04:38

参考先のサイトを参考にわかりやすく書くと... ---- String moji1 = new String("文") + new String("字") + new String("列"); String moji2 = "文字列"; if (moji1 == moji2) { System.out.println("same object"); } else { System.out.println("not same object"); } ---- 文字列として比較した場合、moji1,moji2どちらも同じ"文字列"という文字になります。 ですがifの評価結果は else になります。 これが==で評価してはいけない理由です。
t_kuro9

2021/06/29 15:32

実際にコードにして表してみると、「==」で評価してはいけない理由がよくわかりました。 文字だけで理解するよう努めるのもいいですが、実際に書いてみて結果を見てみるのも良い方法だと感じました。ありがとうございます。
guest

0

デバッグしてみれば良い、と言う話なんですが

後、気になったんですけど

     // 入力した値を定義した変数Bに代入し、そのBをnum[1]に代入します。

~~のコメントの前に全角スペースが入ってます。
~~
※転記時のミスだった模様

投稿2021/06/29 00:48

編集2021/06/29 01:47
K_3578

総合スコア1282

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

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

t_kuro9

2021/06/29 01:37

回答ありがとうございます。申し訳ないのですが、ソースコードのコメントは実際のものではなく、投稿の際に手で入力したものです。伝えるべき情報が不十分でした...
K_3578

2021/06/29 01:45

エラー出てないって書かれてたので転記ミスかなとは思ってました。一応回答修正しておきますね。
guest

0

「java 文字列 等値比較」で検索してみてくだい

投稿2021/06/29 00:45

ozwk

総合スコア13553

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

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

t_kuro9

2021/06/29 03:59

「java 文字列 等値比較」と検索し、「https://techacademy.jp/magazine/15276」のリンクのサイトを読みました。その結果、文字列の比較にはequalsメソッドが適していることがわかりました。はじめに自分が書いていた「C == "+"」だと、文字列の比較に適していないのですね。「C == "+"」のところを「C.equals("+")」と修正したところ、無事if文を実行することができました。回答ありがとうございました!
guest

0

そのifのところで実行を止めて、Cには何が入ってるか見てみては。
そしてそこからステップ実行させれば、どういう動作をするのかわかるでしょ

投稿2021/06/29 00:41

編集2021/06/29 00:43
y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問