今回は番外編ということで、型変換を利用したテクニックをご紹介したいと思います。
早速ですが問題です。
■問題
三桁の整数の百の位、十の位、一の位の数を取り出すプログラムを作成せよ。
実行すると以上のような結果となります。
内部で実は
String x = 1;
String y = 2;
String z = 3;
と別々の数字として扱われている、なんてことはありません!
ちゃんと、
int n = 123;
や
int n = 987;
とint型の値で扱われています。
どうでしょう?考え付きましたでしょうか?
■解答
class Digits { public static void main(String[] args) { int n = 123; int hundreds = n / 100; int tens = (n / 10) % 10; // (n % 100) / 10 int ones = n % 10; System.out.println("【" + n + "】の各位の数"); System.out.println("百の位 : " + hundreds); System.out.println("十の位 : " + tens); System.out.println("一の位 : " + ones); } }
■解説
ポイントは5、6、7行目です。
・5行目
ここで百の位の1という値を取ってきています。
百の位の値は100で割れば取り出すことができます。
123 / 100 の商は1.23になりますが、int型 / int型 はint型になります。
したがって小数部は切り捨てられ、「1」を取り出すことができるのです。
・7行目
6行目より先に7行目をみてみます。
7行目では一の位の値を取り出しています。
一の位は結構単純で、10で割った余りで求めることができます。
すると「3」が取り出せます。
・6行目
少し厄介なのが十の位です。
やり方は2通り。
①123から12を取り出し、そこから10で割ったときの余りを出すという方法
②123から23を取り出し、そこから10で割ったときの商を出すという方法
上のプログラムでは①の方法を用いています。
②はコメントで付け加えています。
■まとめ
・百の位 ・・・ n / 100
・十の位 ・・・ (n / 10) % 10 または (n % 100) / 10
・一の位 ・・・ n % 10
以上の方法を用いると三桁の整数の各位の数を取り出すことができます。
int / int の計算結果がint型になることをうまく利用した仕組みです。
次回も引き続き型変換についてです。
今度はオブジェクト参照型の型変換について説明していきます!