・なぜか書式指定が出るたびに頭の中で理解ができず、混乱してしまいます。(p.30-p.34のところ)
今回も練習問題3-1で一瞬書式指定が出ましたけど、すぐに理解ができず… (1年は{0, 0:#,#}秒)
何かうまく覚えられるようなコツ(?)などはないでしょうか。(あるいはこればかりは経験で慣れるのみでしょうか)
確かに、慣れが必要な構文ですが、よく使うパターンを理解すると良いかもしれません。
{番号}:書式なしで埋め込む
{番号,桁数}:確保してほしい桁数を指定して埋め込む(桁数を超えたらそのまま)
{番号,0:#,#}:3桁カンマ区切りで整数で表示(桁数はダミー扱い)
{番号,0:#,#.00}:3桁カンマ区切りで小数点以下2桁まで表示(桁数はダミー扱い)
{番号,2:00}:2桁以下の数値を00~99で表示(3桁以上だとそのまま)
いろいろと試してみてください。
・%はプレイヤーのインベントリを作るとき使うイメージですが、ほかに何で使いますか?
剰余算の利用例の一つに10進数の下n桁を得ることがあります。
「% 10」で下1桁が、「% 100」で下2桁が、「% 1000」で下3桁が、得られます。
これと整数商を組み合わせると、西暦年yを用いて、
Console.WriteLine(“{0}年は{1}世紀で、略すと{2,2:00}年”, y, (y – 1) / 100 + 1, y % 100);
のような処理ができます。
また、金種計算にも使います。金額mを5円玉と1円玉で最小の枚数によって出すには、
Console.WriteLine(“{0}円は5円玉{1}枚、1円玉{2}枚”, m, m / 5, m % 5);
とできます。試してみてください。
・インクリメントで
int a = 10;
Console.WriteLine(a++);
Console.WriteLine(a);
は10の次に11となりました、解説では後置のインクリメントは評価してからと言ってたのは、計算前の10が出されてからってことですか?
Console.WriteLine(a);の段階でインクリメントの評価がされるということですか?
後置++演算子によるインクリメントは「変数値を評価としてから+1する」です。
よって、Console.WriteLine(a++); は、内部的には、
① Console.WriteLine(a); //aの値である10を表示
② a = a + 1; //aの値である10に1を加えた結果の11をaに代入
という順に処理されます。今回は、この後で、
③ Console.WriteLine(a); //aの値である11を表示
を確認用に実行しているわけです。インクリメントの評価は①・②で行われています。
・素朴な疑問なのですが、前置単項演算子と後置単項演算子はどのように使い分けられていますか?
インクリメントを単独で行う場合、前置でも後置でも同じ動作になります。
つまり「a++;」と「++a;」はこれだけなら同じ結果です。
よって、どちらでも構いませんが、チームルールでどちらかに定める場合もあるようです。
なお、制御文で学習するfor文に用いる場合は、後置にする方が多いようです。
問題は、インクリメントを処理の中や式の中で行う場合で、
①処理や計算の「前に」インクリメントしておきたい場合は前置を用いる
例: int a = 10, b = ++a + 20; //aは11に、bは31になる
②処理や計算の「後で」インクリメントしたい場合は後置を用いる
例: int a = 10, b = a++ + 20; //aは11に、bは30になる
となります。
例えば、カウントアップを表示する処理では、前置を用いて「+1してから表示」、
カウントダウンする処理では、後置を用いて「表示してから-1してマイナスになったら終わる」
などと使い分けることがあります。