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

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

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

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

Q&A

解決済

1回答

4656閲覧

sum+=i;の動きについて

r--

総合スコア18

Java

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

0グッド

1クリップ

投稿2019/05/12 08:16

編集2019/05/12 11:33

前提・実現したいこと・ 発生している問題・

sum+=i;の動きについて動きを理解したい。

該当のソースコード

import .io.*; class Sample4 { public static void main(String []args) { System.out.println("いくつまで合計を求めますか?"); BufferedReader br= new Bufferedreader(new InputStreamReader(System.in)); String str =br.readLine(); int num =Integer.parseInt(str); int sum =0; for(int i=1;i<=num;i++){ sum +=1; } System.out.println("1から"+num+"までの合計は"+sum+"です。"); } }

試したこと

試し方ですが、
動きが頭で理解できない場合、
でバックしたらいいと口で聞いたことがあります、

System.out.println(i+"回目のループ:sum"+sum);
をi++の下にいれてみるということでしょうか。
入れるとSystem.out.println(i+"回目のループ:sum"+sum);の最後のsumのしたに赤い波線が出ました。

sum +=1;の動きを
デバック
System.out.println(i+"回目のループ:sum"+sum);

を入れることで理解できるのか、分かりません。

入れる場所が間違いなのか、入れるコードが間違いなのかお教えください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

r--

2019/05/12 08:58

サンプル では簡単なサンプルで試してみます。 を見ました。 JSample10_1.java class JSample10_1{ public static void main(String args[]){ int num; num = 10; System.out.println(num); num += 5; System.out.println(num); num *= 2; System.out.println(num); num /= 3; System.out.println(num); } } コンパイル後に実行すると次のように表示されます。 これは、イクリプス使うやり方でしょうか。メモ帳を使ったコンパイルの仕方を今までして来ず、 今からそこから調べます。 提示していただいたサンプルにつきまして、頭で理解できましたが、メモ帳で試す方法が逆に存じ上げておらず、今からどうにかしてみなければなりません。ありがとうございます。
cateye

2019/05/12 09:34

sum += 1; ってsum += i;の間違いじゃないの? いくつまで合計を求めますか? 100 1から100までの合計は5050です。
r--

2019/05/12 11:44

確かに  sum += i;の間違いです。ありがとうございます。
guest

回答1

0

ベストアンサー

考えているとおりで、やってみれば良いかと思います。
↓のfor文の中に入れればsumが1ずつ変わっていくのが表示されます。

int sum =0; for(int i=1;i<=num;i++){ sum +=1; }

コピペミスなのかもしれませんが、
・sum +=1; の=が全角なので半角にしないとエラーになります。
・System.out.println(i+"回目のループ:sum"+sum): の最後は;にしないとエラーになります。

投稿2019/05/12 08:34

Akashic

総合スコア298

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

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

r--

2019/05/12 08:46 編集

手書きで=は間違えていて訂正致しました。 System.out.println(i+"回目のループ:sum"+sum); を下のようにいれてみるということで正しいですか? 入れるとSystem.out.println(i+"回目のループ:sum"+sum);の最後のsumのしたに赤い波線が出ました。 int sum =0; for(int i=1;i<=num;i++){ sum +=1; System.out.println(i+"回目のループ:sum"+sum); } System.out.println("1から"+num+"までの合計は"+sum+"です。"); } }
Akashic

2019/05/12 08:52

入れた場所、内容で大丈夫です。 System.out.println("いくつまで合計を求めますか?") も最後の;抜けてますね。 手入力で直しているようならコピペミスかもしれませんね。
Akashic

2019/05/12 08:54

入力は固定値にしてしまいましたが、提示されたコードで動いたので、コピペとか半角/全角とか見直してみると良いかもです。 public static void main(String[] args) { int num = 10; int sum = 0; for(int i = 1; i <= num; i++) { sum += 1; System.out.println(i+"回目のループ:sum" + sum); } System.out.println("1から"+num+"までの合計は"+sum+"です。"); }
r--

2019/05/12 11:43

package lesson6; import java .io.*; public class Sample4 { public static void main(String [] args)throws IOException { System.out.println("いくつまで合計を求めますか?"); BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); String str =br.readLine(); int num=Integer.parseInt(str); int sum=0; for(int i=1;i<=num;i++) { sum=sum+i; System.out.println(i+"回目のループ:sum"+sum); } System.out.println("1から"+num+"までの合計は"+sum+"です。"); } } にしたら、コンソールに いくつまで合計を求めますか? 1 1回目のループ:sum1 1から1までの合計は1です。 と出ました。 質問の方のサンプルにi++が入っていて、一つ先のサンプルだったのと;が抜けていて、エラーになっていたと考えられます。 ここまではよいのですが、デバックの考え方と言いますか、これを打てば動きが分かる処理が出力されるまでは理解できておりません。この点で、何を入れたら動きが理解できるかはどう理解していったのでしょうか。
Akashic

2019/05/12 12:05

質問の内容は、sum+=i の動きを理解したい となっていて、 今回張られているコードでは、sum=sum+i;となっていてsum+=iになっていませんが大丈夫ですか?? あと、全体通してですが、書き写すのではなく自分で動かしている(もしくは、エラーになっている)コードをそのままコピーして貼ってください。エラーになった場合も、エラーをそのままコピーして貼りましょう。 >デバックの考え方と言いますか、これを打てば動きが分かる処理が出力されるまでは理解できておりません。この点で、何を入れたら動きが理解できるかはどう理解していったのでしょうか。 すいません、ちょっと何を求められているかわかりませんが、せっかく手入力できるので、いろいろ入れてみて理解するしかないのではと思います。 たとえば、5を入れたとすると、以下のようになると思います。 1回繰り返すごとに、sumとiが表示されているので、どのように増えているかで動きがわかりませんか?? -- いくつまで合計を求めますか? 5 1回目のループ:sum1 2回目のループ:sum3 3回目のループ:sum6 4回目のループ:sum10 5回目のループ:sum15 1から5までの合計は15です。 --
r--

2019/05/12 13:10

質問の内容を、sum+=i の動きを理解したい。と書いたのにsum=sum+i;の書き方になっていてすみませんでした。(周りのひとはsum=sum+i;を進めていて混ざってしまいました。) >今回張られているコードでは、sum=sum+i;となっていてsum+=iになっていませんが大丈夫ですか?? 直して、System.out.println(i+"回目のループ:sum" + sum);を入れて実行してみまして、上と同じように出力されました。 sum1は1、2回目のループはsum3(???)ここで解らなくなります。よって、なんと入れたら動きが分かるかも理解できていないのです。 JSample10_1.java class JSample10_1{ public static void main(String args[]){ int num; num = 10; System.out.println(num); num += 5; System.out.println(num); num *= 2; System.out.println(num); num /= 3; System.out.println(num); } これは理解できますが、間違いを見つける(デバック法)が出来ないのです。
Akashic

2019/05/12 13:26 編集

sum+=i と sum = sum +i は、書き方が違うだけで同じ動作です。 なので、forで 1回繰り返されるごとに、sum に 繰り返された回数(i)が加算されることになります。 forの中身のデバッグログ(System.out.print)を↓にしたら、わからないですかね? -- for(int i=1;i<=num;i++) { System.out.println(i + "回目のループ"); System.out.println("sum(計算前) = " + sum); System.out.println("i (たす数) = " + i); sum=sum+i; System.out.println("sum(計算後) = " + sum); } --
Akashic

2019/05/12 13:25

sum=sum+i; を sum+=i; に変えても同じ動作になります。
r--

2019/05/12 13:41

同じ動作になる、までは書き方の違いなので分かるのですが、 それと、上のように書いたら身体で解りますが、 このデバックのSystem.out.println("sum(計算前) = " + sum); System.out.println("i (たす数) = " + i); sum=sum+i; System.out.println("sum(計算後) = " + sum); } このコードが書けない(思い浮かばない)のです。問題がここにあります。 これを書き起こすには、なにが頭で考えれないからでしょう。こういう考え方をどう身に付けていましたか。
Akashic

2019/05/12 13:51

人によると思うので、正解はないと思いますが、たくさんコード書いて、たくさん人のコードを読んでを繰り返すと自然と身につくかと思います。 今回の部分だと、あるタイミング(計算の前後とか)で、ある変数(sumとかi)に何が入っているかを確認することで理解できるかと思いますが、コード上のどこまでは意図したとおりに進んでいるかとか、変数に意図した値が入っているかは、まずは表示してみる(System.out.println)のは第一歩かもしれません。 何を使ってコーディングしているかはわかりませんが、たいていの統合開発環境(Eclipseとか)であれば、デバッグ実行機能があるので、ブレークポイントを付けてステップ実行するのもわかりやすいかと思います。 https://qiita.com/daikete/items/fb70e6e5808b433b9d85
r--

2019/05/12 15:14

Eclipseです。まだ使ったことなかったです。これを機に挑戦してみなければなりません。 キータの提供ありがとうございます。ブレークポイントですね。 いったんコミットしてみたいです。ちなみにデバック実行機能で教えていただいた出力コードが出せるということとは別なのでしょうか。もし出てくれたら、流れを実行機能で学べます。
r--

2019/05/14 15:10

本当にアレなのですが(デバック機能の話しを教えていただいた)、自分が動きを言えるまで自動の機能をしないことにしたいので、ここでリアルな覚え方を質問致します。ありがとうございます。
r--

2019/05/14 15:24

何度もすみません。 1回目のループ:sum1 2回目のループ:sum3 3回目のループ:sum6 4回目のループ:sum10 5回目のループ:sum15 1から5までの合計は15です。 注: sum=sum+i; System.out.println(i+"回目のループ:sum"+sum); i+"回目のループ:sum"   +sumの+sumが分かりににくいです。 ここが1,3,6、~になるの説明を文章にしたらどう言えますか?
Akashic

2019/05/14 19:12

先日コメントに書いたのと同様ですが、以下の通りで回答になりますかね。 -- for(int i=1;i<=num;i++) { System.out.println(i + "回目のループ"); System.out.println("(計算前)sum = " + sum); System.out.println("(たす数) i = " + i); sum=sum+i; System.out.println("(計算後)sum+i= " + sum + "\n"); } System.out.println("1から"+num+"までの合計は"+sum+"です。"); } -- ■実行結果 1回目のループ (計算前)sum = 0 (たす数) i = 1 (計算後)sum+i= 1 2回目のループ (計算前)sum = 1 (たす数) i = 2 (計算後)sum+i= 3 3回目のループ (計算前)sum = 3 (たす数) i = 3 (計算後)sum+i= 6 --
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問