1

ここに私が書いたコードがあります。

public class cube { 
   private int length;
   private int breadth;
   private int height;
   private int volume;
   private int density;
   private int weight;
   public cube(int l,int b,int h, int d)  {
      length=l;
      breadth=b;
      height=h;
      density=d;
   }

   public void volmeShow(){
      volume = length * breadth * height;
      System.out.println("The Volume of the cube is "+this.volume);
   }
}

したがって、上記のキューブ クラスをこのように実装すると、

public class cubeApp {
    public static void main(String[] args){
       cube mycube = new cube(5,6,9,2);
       mycube.volumeShow();
    }
}

音量が 270 であることを示す出力が得られます。

しかし、ボリュームが 0 であるという出力が得られます。一方、ボリューム変数を次のように定義すると、次のようになります。

public class cube { 
    private int length;
    private int breadth;
    private int height;
    private int volume=length*breadth*height;
    private int density;
    private int weight;
    public cube(int l,int b,int h, int d)  {
        length=l;
        breadth=b;
        height=h;
        density=d;
    }

    public void volmeShow(){
        System.out.println("The Volume of the cube is " + this.volume);
    }
}

なぜこれが起こっているのですか?

4

7 に答える 7

4

lengthそのステートメントが実行されたときに、breadthheightには値が割り当てられていないためです。コンストラクターでその計算を実行する方がよいでしょう。

于 2012-10-16T22:58:24.867 に答える
3

唯一の問題はvolume、オブジェクトの構築が行われる前にのみ変数が定義されることです。残りの属性はデフォルトで 0 に設定されているため、結果のボリュームが 0 でした。コンストラクターを次のように変更できます。

public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}

このようにして、ボリュームが適切に計算されます。補足として、クラス名として Cube を使用する必要があります。 Java のコード規則を参照してください。

于 2012-10-16T22:58:59.050 に答える
2

クラスが初期化されると、すべてのメンバーフィールドがデフォルト値(intおよび一般に数値)に初期化されます。

基本的に

private int length;
private int breadth;
private int height;
private int density;
private int weight;
private int volume=length*breadth*height;

次のように評価します

private int length = 0;
private int breadth = 0;
private int height = 0;
private int density = 0;
private int weight = 0;
private int volume=length*breadth*height;

に評価されます

private int volume=0*0*0;

その後、ボリューム値を更新しなくなります。

あなたは実際にやったほうがいいでしょう...

public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}

...実際にはlength、、、、および値はクラスに何も追加されないため、(例から)完全に削除することができますbreadth...heightdensity

于 2012-10-16T23:02:00.460 に答える
2

クラスの初期化時に実行されるのでprivate int volume=length*breadth*height;、関連するすべてのフィールドは 0 です。

コンストラクターを次のように変更できます。

public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}

このようにして、ボリュームが適切に計算されます。補足として、クラス名として Cube を使用する必要があります。 Java のコード規則を参照してください。

于 2012-10-16T22:58:44.597 に答える
1

値が他の変数に設定された後、ボリュームを計算して割り当てる必要があります -

public cube(int l,int b,int h, int d)  { 
    length=l; 
    breadth=b; 
    height=h; 
    density=d; 
    volume=length*breadth*height;
}

しかし、ボリュームはあなたのクラスでは冗長に見えます。あなたはそれを削除することができます、あなたのメソッドはいつでもその場で計算できます-

public void volmeShow(){     
     int volume=length*breadth*height; //local, not needed at class level
     System.out.println("The Volume of the cube is " + volume);
于 2012-10-16T22:58:59.797 に答える
0

属性は、コンストラクターの本体の前で、super()の呼び出しの後に、宣言された順序でコンストラクターによって初期化されます。

ボリュームの初期化時に、あなたの場合、すべてのメンバーはゼロに設定されます。これは、intのデフォルト値です。

あなたは書く必要があります:

public cube(int l,int b,int h, int d)  {
    length  = l;
    breadth = b;
    height  = h;
    density = d;
    volume  = length*breadth*height;
}
于 2012-10-16T23:01:41.560 に答える
0

そのように var を定義することはできません。

メソッドの外で定義すると、これはクラスの作成時に計算されます。

于 2012-10-16T22:58:38.660 に答える