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

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

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

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

Q&A

解決済

5回答

385閲覧

計算式が理解できない

Casablanca_mtg

総合スコア209

Java

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

0グッド

0クリップ

投稿2018/05/23 00:42

お世話になります
下記のコードの内容を教えてください

java

1public class Main { 2 public static void main(String[] args) { 3 add(100, 20); 4 add(200, 50); 5 } 6 // 複数の値を受け取るaddメソッド 7 public static void add(int x, int y) { 8 int ans = x + y; ⇒100+20ですね 9 System.out.println(x + '+' + y + '=' + ans); 10 } 11}

コンパイルしたら答えは
344
604
になりました⇒なぜこのようになるのかが理解できません
(x + '+' + y + '=' + ans);この部分がよく理解できません

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

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

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

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

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

guest

回答5

0

ベストアンサー

以下のようにすると期待通りになると思います。
System.out.println(x + "+" + y + "=" + ans);

  • と = をシングルクォートではなくダブルクォートで囲います。

シングルクォートで囲んだリテラルはchar型になります。
char型は内部ではint型で持っているので、普通に数値の足し算になってしまうのです。
int i = '+' のようにint型の変数に代入することもできます。
System.out.println('+' + '='); とすると数値が結果として出てくると思います。

  • と = は文字列として連結したいわけですから、

ダブルクォートで囲んでStringとして扱う必要があります。

投稿2018/05/23 00:52

root_jp

総合スコア4666

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

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

0

シングルクォートをダブルクォートに変えるとできると思います。
シングルクォートだと文字リテラルに解釈されて、文字コードの数値計算がなされてしまいます。
ダブルクォートだと文字列リテラルに解釈されて、+が文字列結合になるはずです。

投稿2018/05/23 00:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

'+''='といった、一重引用符で囲んだ文字を式の中に入れると、文字コードの値が計算に使われます。

'+'はU+002B(10進法で43)、'='はU+003D(10進法で61)です。

投稿2018/05/23 01:09

maisumakun

総合スコア145183

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

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

Casablanca_mtg

2018/05/23 01:23

皆様大変分かりやすい回答ありがとうございます。シングルクォートとダブルクォートの使い分け理解できました。この違いで答えが全く違ってくるのですね。すごくわかりやすかったですありがとうございます。ダブルククォートに変えたら 100+20=120 200+50=250 となり、また一つ勉強させていただきました。本当にご指導に感謝いたします
guest

0

「'」(シングルクォーテーション)で囲まれた1文字はcharというデータ型を表します。
例えば以下のような検証コードを書いてみると、'+'や'='が実際にどういう値かわかります。

char c; c = '+'; System.out.println("" + c + "=" + (int)c); // +=43 c = '='; System.out.println("" + c + "=" + (int)c); // ==61

そうすると、「add(100,20)」の結果として、

x + '+' + y + '=' + ans = 100 + 43 + 20 + 61 + 120 = 344

という数値が表示されることが分かります。

投稿2018/05/23 01:13

tkturbo

総合スコア5572

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

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

0

""の文字列定数ではないため、文字列連結演算子String Concatenation Operator +が適用されません。

char型はint型に拡大変換できます。これはプリミティブ型の拡大変換または英語で
5.1.2. Widening Primitive Conversion
といいます。

Java

1// '+'→43 2// '='→61 3// 100 + 43 + 20 + 61 + 120 = 344 4System.out.println(x + '+' + y + '=' + ans);

投稿2018/05/23 01:07

umyu

総合スコア5846

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問