Thinkers'Studio
JavaとC言語の自習ツール
final の変数について知っておこう

 final をつけて宣言した変数は、一度値を代入すると変更できないため、定数のような取り扱いができます。
 final の変数名は一般に大文字で書き、単語を連ねる場合はアンダースコアを使います。

 Javaの標準のクラスでも、多数の final フィールドが定義されています。 下はその一例です。
クラスフィールド
java.lang.Integer public static final int MAX_VALUE 2147483647
java.lang.Math public static final double PI 3.141592653589793
java.awt.Event public static final int MOUSE_DOWN 501
 final にする目的は、おもに次の2点です。
  • 固定の値を書き換えられないようにし、そのことを明示する
  • 値に意味の分かりやすい名前を与えることで、コードを読み書きし易くする
    (上記の例で、MOUSE_DOWN なら意味が分かりますが、501 では何のことだか分かりません。)
(今回のクイズです)
 まず、下のプログラムを見てください。
class Order {
    int price;
    int count;

    Order( int p, int n ) {
        price = p;
        count = n;
    }
    int totalPrice() {
       return price * count;
    }
}
class OrderTest {
    public static void main( String[] args ) {
        Order ord = new Order( 800, 4 );
        System.out.println( "合計"+ ord.totalPrice() +"円" );
    }
}
 Order クラスは、コンストラクタに商品の値段と数量を指定してオブジェクトを生成します。
 その後、totalPrice メソッドを呼ぶと合計金額が表示されるシンプルなクラスです。
 このクラスに、送料 CARRIAGE を一律 500円として final で定義してください。
 そして、totalPrice メソッドを修正して、送料込みの金額を返すようにしてください。

   (答えは、次回の Java の Tips で ・・・)

前回のクイズの答え: for の2重ループでは、以下のような条件にします。(前回の問題を見る
    for( int row = 0; row < celldata.length; row++ ) {
        for( int col = 0; col < celldata[row].length; col++ ) {
            System.out.println( "["+row+"]["+col+"] = "
                                 + celldata[row][col] );
        }
    }
col の forループでは、celldata[row].length で、各行の配列要素数が分かります。
前回のデータは配列要素数が全行で同じなので celldata[0].lengh としても動きますが、次のようなデータに対応するには、celldata[row].length で参照しなければなりません。
    int[][] celldata = { { 10, 11, 12, 13, 14 }
                       , { 20, 21, 22 }
                       , { 30, 31, 32, 33 } };