class Sum{
public static void main(String[] args){
int s = 0 , i = 1;
do{
i = ++i;
s = s+1;
}while(i < 10);
System.out.println("1から" + i + "までの和は" + s);
}
}
上記のプログラムについて質問なんですが、
5行目、i = ++i; の部分を i = i++; と、
後置インクリメントにしたところ、実行時何も表示されませんでした。
前置・後置インクリメントの違いも調べましたが、なぜこうなるのかわかりません。どなたか教えていただけないでしょうか?
それとも、こういうのは「なぜ?」と考えるだけムダなのでしょうか?
No.1ベストアンサー
- 回答日時:
i = i++;
で、iが1の場合を考えてみると、
1 = 1++;
となります。
左辺にまず1が代入された後、右辺が2になりますので、
左辺は1のままです。
よって永続ループとなって、
System.out.println("1から" + i + "までの和は" + s);
の行まで処理が進んでいないために表示されないんだと思います。
回答ありがとうございます。
i = 1;
i = i++;
はⅰに1をまず代入するのはわかっていたのですが、その後は
i++の結果が次々入っていくのだと勘違いしていました。
No.2
- 回答日時:
ア.i = ++1;
iをインクリメントした値を作成し、iに代入する。
内部動作
(1) work ← i
(2) work ← work + 1
(3) i ← work
※work はマシン内の作業領域と考えて下さい。
イ.i = i++;
iにiを代入してからiをインクリメントした値を作成する。
(1) work ← i
(2) i ← work
(3) work ← work + 1
つまり、i=i++;とすると、いつまでもi==1のままなので、無限ループになります。
普通、単項演算では受け取り側変数を記述しません。下記参照
do {
i++; // ++i; でも良い
s=s+1;
} while( i < 10 );
回答ありがとうございます。
ggaoggさんに返信したとおり、勘違いしておりました・・・。
>つまり、i=i++;とすると、いつまでもi==1のままなので、無限ループになります。
普通、単項演算では受け取り側変数を記述しません。下記参照
do {
i++; // ++i; でも良い
s=s+1;
} while( i < 10 );
なるほど・・・ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java java final 1 2022/06/10 22:49
- Java eclipse実行ができない 2 2022/07/27 04:47
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
EXCEL/VBA 変数の値をクリップ...
-
processing エラーで、 "cannot...
-
テキストボックスの値を変数に...
-
C言語 列挙型(enum型)変数について
-
整数xxxが大き過ぎますというエ...
-
Variant型で宣言してるのにEmpt...
-
jsp~jspにhiddenを使って変数...
-
コマンドプロンプト バッチ|結...
-
ASP+SQLにてSessionがNullになる
-
VBAでコマンドプロンプトの結果...
-
JavaScriptの関数宣言と関数式...
-
テキストファイルの値をバッチ...
-
vba 最大値 条件分岐
-
インクリメント演算子の前置(+...
-
計算プログラムにおける無限大...
-
【VBA】複合代入演算子
-
java 乗算をシフト演算と加算を...
-
定数の設定について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
C言語 列挙型(enum型)変数について
-
テキストボックスの値を変数に...
-
Variant型で宣言してるのにEmpt...
-
[VBS]変数を定数に変換する方法...
-
python の 連鎖代入の文法
-
エラーの意味は? Lvalue req...
-
jsp~jspにhiddenを使って変数...
-
processing エラーで、 "cannot...
-
整数xxxが大き過ぎますというエ...
-
プログラミングで変数と関数の...
-
構造体からレコードセットへの代入
-
コマンドプロンプト バッチ|結...
-
stdpicture型の変数に、、
-
無名関数のメリットがよくわか...
-
i++と++i ってどう違うのですか?
-
DataTableの値を変数に代入したい
-
Accessコンボボックスにレコー...
-
VBA 1行で複数の代入を行った...
おすすめ情報