• ベストアンサー

プログラミング【代入演算子】

テキストブックを読んでいます。(数学が大の苦手です) 複合代入演算子についてなのですが、テキスト解説には、 int y = 10; int y += 15; System.out.println("y="+y); というプログラムがあるとします。この場合の実行結果の数字は「y=15」でした。 全く意味がわかりません。 int y = 10というのは[y=10」で、int y = 15 に当てはめると、 10+15=25ではないのですか? どのように計算すれば「u=15」が出てくるのか知りたいです。 恥ずかしながら、宜しくお願いします。

  • Java
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
回答No.4

>2行目の式に代入して、 >y=y+5 >10=10+5 >y=15-10 >Y=5 ↑の「10=10+5」以降がなんとも。笑 「=」は「代入」なので y = y + 5; っていうのは (新しい)yには(古い)yに5を足したものを代入しますよ。 ってことです。 「数学」の「=」(等号)とは別物です。 なんなら慣れるまでは y ← y + 5; ってな感じで矢印に置き換えると感覚としてはわかりやすいかも。 yに5を足した値をyに入れるよ。 って見えません? 最後にもう1度書きますが、 プログラムの代入演算子「=」は「代入」なので、 「=」の右側にある値を、「=」の左側の変数に「入れる(代入)」 ってことです。 数学の方程式などで使う「=」(等号)とはまったくの別物です。

sackyna
質問者

お礼

なんとも言えない計算をしてしまい、大変失礼いたしました。 もう恥もなにもかき捨ててご質問させて頂きました。 なるほど、やはり超ビギナーとしては、上記のややこしい書き方よりも、 おとなしく「y←y+5;」のほうがよっぽどわかりやすいので、 こちらでしばらく勉強を進めてみます。 思ったよりも早くテキストに出てきてしまったので、正直非常に焦っております。 このたびはご丁寧に回答してくださり、本当に助かりました。 有難うございます!!

sackyna
質問者

補足

ちなみに、今の気持ちをプログラミング(勉強はじめて2日目)であらわすと、 public class arigatou{             public static void main(String[] args){     system.out.println(“本当に有難うございます!”);    } } です。笑

その他の回答 (3)

回答No.3

ん? y+=15; じゃなくて y+=5; じゃん。 だったら「y=15」になるよ。 y+=15; で考えるなら、「y=25」になるよ。 だからテキストの計算結果はあってるし、 質問者さんの質問部分も計算結果はあってる。 たぶん見間違えて勘違いしちゃって、焦ってハマっちゃった感じですかね。 ちょっとコーヒーでも飲んで気分転換してみては? で、テキストで間違ってるのはNo.1さんの「同じ変数名を2度宣言してる」ってとこ。

sackyna
質問者

お礼

待っ・・・待って!待ってください。 という事は、二行目は別の変数を使ったとして、 int y = 10; y+= 5; System.out,prinln("y="+y); とすると、計算の理解としては、 まず、y=10で、 2行目の式に代入して、 y=y+5 10=10+5 y=15-10 Y=5 にはならないのですか? そもそも私の理解が足りていないみたいです・・・ 何度読み返しても理解ができません。 y = 5 y+= 5 の違いがそもそも理解できておらず、テキストをみると、この「+=」というのは 複合代入演算子で、「足して代入」となるようです。 ということは、y += 5を考えた場合、 y= y+5・・・ これってそもそも計算できるのでしょうか?

回答No.2

コンパイルエラーになりますよ。 int y = 10; y += 15; System.out.println("y="+y); を実行すると、質問者さんのご理解通り、「y=25」が出力されます。 どんなテキストか知りませんが、正誤表を探してみて、なければそんなテキストは返品してお金を返してもらいましょう。

sackyna
質問者

お礼

ご回答有難うございます! 頑張って読み進めてはいたのですが、この部分でつまずき、20分ほど 「あーでもない、こーでもない」状態を繰り返しております。 写真を添付したのですが、やはり間違っておりますでしょうか?

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

いいえ、 そもそも int y = 10; int y += 15; System.out.println("y="+y); これは2行目でコンパイルエラーになります。 同じ変数は2回宣言できません。 もし、このように書かれているのなら その本の記述に問題があることになります。

sackyna
質問者

お礼

ご回答有難うございます。 写真を添付させて頂きましたが、いかがでしょうか? 本の記述に間違いがあるのでしょうか?

関連するQ&A

  • javaプログラミング これってできるでしょうか?

    Javaのプログラミングで、例えば System.out.println(""); の、System.out.printlnを変数で代入して、仮にyを代入したとしらその後の System.out.println("");は y(""); にしたりすることはできるのでしょうか?できるのならどうやってやるのでしょうか? 回答よろしくお願いします。

    • ベストアンサー
    • Java
  • サルでもわかる 代入演算子 PHP

    只今、PHPの講義を受講しています。 しかし、私は数学の頭でしかなく、「代入演算子」の理解ができません。 ”なぜ、イコールに違う数字を使っちゃうの?”と、 脳みそに”?”だらけです。 講師もあまり深く突っ込んでもらわずに 「こういう物」と、覚えちゃってください。などと、言います。 私としては、理屈が成り立っていないのに、覚えられる訳がないのです。と、 少し立腹ぎみなのですが、ここは抑えて自分で解決しようと思ったのですが、 やはり、理解できません。 ちなみに、過去に他のプログラム言語を学んだことはありません。 どうか、この数学あたまに代入演算子を理解させる方法をご伝授ください。

    • ベストアンサー
    • PHP
  • この演算子は何の演算子でしょうか?

    下記のようなjavaコードがあります。 int mode = 1; if (true) mode|= 2; System.out.println(mode); これを実行すると結果は3になりますが、 ここで「|」とは何でしょうか? 恥ずかしいですが、 javaを1年半くらいやってきましたけど こんな演算子初めて見ます。 結果からみると 「mode|= 2」が「mode+= 2」と同じになりますが、 「+=」と「|=」は同じものでしょうか?

  • 演算子について

    こんにちは。JAVA超初心者です。 Javaの本に ++x はxを使ったあとに1増やす と書いてありましたが、イマイチ意味がわかりません。 「使う」とは?? int n = 0; int m = 0; m=n++; System.out.println(m); System.out.println(n); これの実行結果は 0 1 になるらしく、 m==n==; の意味は nの値(0)にmを代入した後nに1プラスする。 m=n++は m=n;,n=n=1;と書き換えられる。 とのことですが、どうもしっくり来ません。 nをmに代入するのなら、int m=0 が書いてある 意味がないような気がするし、 この実行結果に納得がいきません。私は 1 0 になると思うのですが・・・。 これ以上どう分かりやすく説明すればいいのか わからないと思われるかもしれませんが、 もし思いついたら教えてください。 宜しくお願いします。

    • ベストアンサー
    • Java
  • 文字を整数として扱う場合の演算について質問

    javaの参考書に、文字を整数として扱う場合の演算についての解説があり、疑問点があったので質問します。 質問1:何故char型の変数は、キャストしなくてもint型のリテラルを代入することができるのか?      例えば、 以下の演算はキャストしなくてもこのまま代入できます。 char ch='a'; ch=98; でも、以下の演算はキャストしていないのでエラーになります。      char ch='a'; ch=ch+1; これは何故ですか?参考書に記載されていた理由として、「byte,char,short、 これ等の型の変数や値を使って計算すると、それ等は一度intに直して計算されるから」というような趣旨の事が書いてありました。 つまり、char型の変数には、キャストしない限りint型の数値を代入できないということですよね? でも前者のソースコードは、chはchar型であるにもかかわらず、int型のリテラル98を代入できています。 これは何故ですか? 質問2:javaの参考書に、インクリメント・デクリメント演算子と複合代入演算子は、型を保存するという解説がありました。これはどういう意味ですか? 僕の仮説では、例えば、      char ch='a';      ch+=5; であれば、5は、char型のまま代入されるということでしょうか?

    • ベストアンサー
    • Java
  • ビット演算子が使えない。

    こんにちは現在Javaをやっているいのですが、 //計算を行うプログラムです。 public class keisan{ public static void main(String args[]){ int num1=10; int num2=15; System.out.println("num1とnum2にいろんな演算を行っています。"); System.out.println("num1+num2は"+(num1 | num2)+"です。"); } } コンパイルはできましたが、 Exception in thread "main" java.lang.NoClassDefFoundError: keisan[ とエラーがでてきます。どうしたら良いのでしょうか? お願いします。

    • ベストアンサー
    • Java
  • 代入の問題について

    数学1の代入問題で分からないことがあります。 x^3+y^3の値を求めるために代入をするんですが、 解説には『(x+y)^3=x^3+3x^2y+3xy^2+y^3 -3xy(x+y)に代入する』となっています。 ですが、x^3+y^3は(x+y)(x^2-xy+y^2)で求められるはずですよね? なのになぜ前者の方法で解くんでしょうか?さっぱりわかりません!

  • プログラミング(JAVA)について

    2つほど質問があります。どなたか回答していただける方がいたらお願いします。 1、以下のじゃんけんゲームのプログラムを作成したのですがfor文を用いてコードを短くするにはどうすればいいですか?      class jyanken { public static void main(String[] args) { int x = 0, y = 0; if (args[0].equals("グー")) { x = 0; } else if (args[0].equals("チョキ")) { x = 1; } else if (args[0].equals("パー")) { x = 2; } else { System.out.println("エラー"); } y = (int)(Math.random() * 10.0) % 3; if (x == 0) { if (y == 0) { System.out.println("あいこ"); } else if (y == 1) { System.out.println("勝ち"); } else if (y == 2) { System.out.println("負け"); } } else if (x == 1) { if (y == 1) { System.out.println("あいこ"); } else if (y == 2) { System.out.println("勝ち"); } else if (y == 0) { System.out.println("負け"); } } else if (x == 2) { if (y == 2) { System.out.println("あいこ"); } else if (y == 0) { System.out.println("勝ち"); } else if (y == 1) { System.out.println("負け"); } } } } 2、もう1パターンでじゃんけんプログラムを作成しようと考えているのですが。上手くできないので参考のファイルを掲示してもらえると嬉しいです。 機能としては、for文とif文を使用して。プログラムの起動と同時に、コンピュータがグー、チョキ、パーをランダムに出す(プレーヤに見せない) 次に人がグー、チョキ、パー何を出すかをキーボードで入力して最後にプログラムが出したものとコンピュータがランダムに出したものと比較し、勝負を表示する。といった感じです。

  • Java プログラミング エラー

    public class kadai1 { public static void main(String[] arg){ /* Book クラスからインスタンスを生成*/ Book myBook = new Book("The Java Tutorial",55); System.out.println("My book title = " + myBook.getTitle()); System.out.println("My book title = " + myBook.title); System.out.println("My book price = " + myBook.getPrice()); System.out.println("My book price = " + myBook.getYenPrice()); /*Book クラスからインスタンスを生成*/ Book yourBook = new Book("The Java Programming Language",40); System.out.println("Your book title = " + yourBook.getTitle()); System.out.println("Your book price = " + yourBook.getPrice()); } } class Book{ //クラスbook の宣言 String title; //題名 private int price; // 価格(ドル) Book(String t, int p){ //コンストラクタ title = t; //題名の設定 price = p; //価格の設定 } public String getTitle(){ // 題名の取得 return title; } public int getPrice(){ // 価格の取得 return price; } public double getYenPrice(){ return price*111.58; } } このとき「Exception in thread "main" java.lang.NoSuchMethodError: Book.getYenPrice()D」 というエラーがでるんですが、これはgetYenPrice()というメソッドはないといってきてるんでしょうか? 作ってるんですがどういうことなんでしょう。

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

    ただいまjavaプログラム勉強中でhit&blowを制作しております。 public static void main(String[] args) { Scanner scan = new Scanner(System.in); Random rand = new Random(); int[] answer = new int[4]; int[] input = new int[4]; int[] Number = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }; int x = 10; for (int i = 0; i < 4; i++) { int select = (int) (Math.random() * x); answer[i] = Number[select]; Number[select] = Number[x - 1]; x--; } int count = 1; while (true) { System.out.println("4桁の異なる数値を入力"); int str_input = scan.nextInt(); // 代入 for (int i = 0; i < 4; i++) { input[i] = str_input; } // hit int hit = 0; for (int i = 0; i < 4; i++) { if (input[i] == answer[i]) { hit++; } } // blow int blow = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++){ if (i != j && input[i] == answer[j]) { blow++; } } } if (hit == 4) { System.out.println("4hit"); System.out.println("正解まで " + count + "回"); break; } else { System.out.println("Hit:" + hit + " Blow:" + (blow - hit)); count++; } } } } 数字が4桁で作っているのですが、数字や4桁以上を入力してしまった場合の表示は後にしようとして、先にhitとblowの判定を作ろうとしているのですが、上記で実行したところhitとblowの判定がされずhit:0blow:0と表示されてしまいます。解決策を教えてください。 自分で作ってみたものの、hit blowの判定方法があっているかも自信がないです。

    • ベストアンサー
    • Java

専門家に質問してみよう