0

CameraPhone クラスコンパイラのすぐ下で宣言された変数 imageSize と memorySize を使用してこのコードを最初にコンパイルしようとしたときに、なぜそれが問題なのかという厄介な質問がありましたが、コードの最後で変数を宣言すると完全に機能します。

Phone クラスが存在するとします。2 つのインスタンス変数を含むサブクラス CameraPhone を定義します。imageSize という名前の整数は、各画像のサイズをメガピクセル単位で表します (簡単にするために、ピクセルは 1 バイトを占めると仮定します。したがって、メガピクセルはメガバイトに等しい)。つまり、2 は各画像がカメラのメモリのギガバイト数を表す memorySize という名前の整数 (つまり、4 はメモリの 4 ギガバイトを意味します)。上記の 2 つのインスタンス変数に対応する 2 つの整数パラメーターを受け取り、それぞれのインスタンス変数を初期化するために使用されるコンストラクターがあります。カメラのメモリが保持できる画像の数を (整数として) 返す numPictures という名前のメソッドもあります。1 ギガバイトは 1,000 メガバイトであることを忘れないでください。

public class CameraPhone extends Phone { 

    public CameraPhone(int imageSize, int memorySize) { 
        this.imageSize  = imageSize; 
        this.memorySize = memorySize; 
    } 

    public int numPictures() {
        return memorySize * 1000 / imageSize;
    } 

    private int imageSize; private int memorySize;

}
4

1 に答える 1

1

そして、あなたが得ていた「論理エラー」は何ですか? 質問のコードをコピーして貼り付けると、問題なく動作します。属性 (別名「インスタンス変数」) をどこで宣言したかはまったく問題はありません。実際にどこかで宣言して初期化したように。私が言いたいのは、これらの行がクラス宣言内 (メソッド内ではなく) のどこかにある限り、コードはコンパイルされるということです。

private int imageSize;
private int memorySize;

また、エラーを引き起こしていないthisコンストラクター内で使用することは完全に合法です。また、属性は、宣言した場所またはコンストラクター内で直接初期化できます。

于 2012-10-24T21:49:59.067 に答える