金額などの表示で使う、3桁ごとにカンマを入れるプログラムのサンプルです。
Java の機能を使うともっと簡単にできますが、ここでは学習のため、桁数を数えながらカンマを挟む例を示します。
まず、数値を String型の文字列に変換します。
そして次のような繰り返し処理で、カンマを挟んだ逆さまの文字列を作ります。
(例 1234567 --> "765,432,1")
・ 文字列の最後の文字からひと文字ずつ取り出し、作業用に保存しながら桁数を数える
・ 3 桁の区切りならカンマを入れる
最後に、文字列をひっくり返して変数にセットします。
(例 "765,432,1" --> "1,234,567")
class CommaFormat { int num; String s; CommaFormat( int n ) { num = n; s = ""; } void insComma() { String temp = ""; boolean minus = false; if( num < 0 ) minus = true; String nstr = Integer.toString( Math.abs(num) ); int len = nstr.length(); int keta = 0; /* 下位から順に数字を取り出し3桁の区切りに,を入れる */ for( int i = len-1; i >= 0; i-- ) { temp += nstr.charAt(i); keta++; if( keta % 3 == 0 && keta != len ) temp += ","; } if( minus ) temp += "-"; /* sに逆順にコピーする */ for( int i = temp.length()-1; i >= 0; i-- ) s += temp.charAt(i); } } class CommaInsSample { public static void main( String[] args ) { CommaFormat c1 = new CommaFormat( 1234567 ); CommaFormat c2 = new CommaFormat( -1234567 ); c1.insComma(); System.out.println( c1.s ); c2.insComma(); System.out.println( c2.s ); } }
(今回のクイズです)
Java の機能は非常に豊富なので、どんなクラスが使えるかを調べるのに時間がかかるケースも少なくありません。
今回の例では、たとえば java.text.DecimalFormat のクラスが活用できます。そのクラスを使って書いてみましょう。
(答えは、次回の Javaの Tips で ・・・)
Aさんメソッドの結果: 1 Bさんメソッドの結果: 3Aさんの作ったメソッドの結果は間違っていることが分かります。