0

私のコードは、サイズと年ではなく 0 を出力します。私は何を間違っていますか?基本的にはそれらを返したいのですが、何をしているのかわかりません。

public class House {
private int year;
private int size;
private static int nbrOfHouses; 
public static final int MIN_SIZE =10; 

public House(int _year,int _size){
    _year = year;
    _size = size;
}
public static int getNbrHouses(){ 
    return nbrOfHouses;
}
public int getYear(){
    return year;
    }
public int getSize(){
    return size;
}
}


House[] myHouse = new House[10];{
  myHouse[0] = new House(1902, 120);
  myHouse[1] = new House(1954, 180);
  myHouse[2] = new House(1995,90);

  for(int i=0; i< myHouse.length; i++){
        if(myHouse[i]!=null){
          System.out.println(myHouse[i].getYear());
4

5 に答える 5

5

これは逆です:

public House(int _year,int _size){
    _year = year;
    _size = size;
}

次のようにする必要があります。

public House(int _year,int _size){
    year = _year;
    size = _size;
}

またはさらに良い:

public House(int year,int size){
    this.year = year;
    this.size = size;
}
于 2013-09-02T04:55:03.903 に答える
4

コンストラクターで、クラス変数が正しく割り当てられていません。これを行う:

public House(int _year,int _size){
    year = _year;
    size = _size;
}

クラス変数に引数が割り当てられます (0 に初期化されます)。クラス変数は 0 で初期化され、変更されていないため、0 が出力されます。

@pfrank が述べたように、Java 命名規則には通常アンダースコアがありません。それをコーディングするより一般的な方法は、thisキーワードを使用することです。

public House(int year,int size){
    this.year = year;
    this.size = size;
}
于 2013-09-02T04:53:06.317 に答える
2

使用する

public House(int _year,int _size){

this.year = _year;
this.size = _size;
}
于 2013-09-02T04:54:10.087 に答える
1

フィールドが正しく初期化されていません。

public House(int _year,int _size){
    this.year = _year;
    this.size = _size;
}
于 2013-09-02T04:53:33.977 に答える
1

Java 言語仕様セクション 15.26 の状態

AssignmentExpression:
    ConditionalExpression
    Assignment

Assignment:
    LeftHandSide AssignmentOperator AssignmentExpression

LeftHandSide:
    ExpressionName
    FieldAccess
    ArrayAccess

AssignmentOperator: one of
    = *= /= %= += -= <<= >>= >>>= &= ^= |=

常に右側から左側に割り当てます。これ

public House(int _year,int _size){
    _year = year;
    _size = size;
}

したがって、逆になり、

year = _year;
size = _size;

また、プリミティブ型のインスタンス フィールドはデフォルトで 0 に初期化されるため、すべてのintフィールドの値は 0 になります。

于 2013-09-02T04:53:50.433 に答える