2016-04-02 7 views
1

私はCodecademyを使用してJavaを学習しています。私は、のnの脚で走るオブジェクト(この場合は3歳の犬、スパイク)を作るコードを書こうとしています。私は "brute force debugging"を試みたが、うまくいかなかった。コードを動作させるために、どのように "これを変更する"という行を変更する必要がありますか?Javaインスタンス変数

class Dog { 
    public Dog(int dogsAge) { 
     int age = dogsAge; 
    } 

    public void bark() { 
     System.out.println("Woof!"); 
    } 

    public void run(int feet) { 
     System.out.println("Your dog ran " + feet + " feet!"); 
    } 

    public static void main(String[] args) { 
     Dog spike = new Dog(3); 
     spike.bark(); 
     spike.run(this.age); // How to change this? 
    } 
} 
+1

コンストラクタで変数 'age'を宣言すると、コンストラクタ内でのみ表示されます。これは 'scope'の例です。 –

答えて

3

あなたのクラスは する必要がある - age変数 のためのストレージを追加 - でその値を設定しますコンストラクタ - 主な機能にアクセスする方法を提供する

class Dog { 
private int age; //storage for the age value within the instance 
public Dog(int dogsAge){ 
    this.age = dogsAge; // set the value 
} 
// provide a way to access the age 
public int getAge() { 
    return this.age; 
} 
public void bark(){ 
    System.out.println("Woof!"); 

} 
public void run(int feet) { 
    System.out.println("Your dog ran " + feet + " feet!"); 
} 


public static void main(String[] args) { 
    Dog spike = new Dog(3); 
    spike.bark(); 
    spike.run(spike.getAge()); // retrieve the age and use it 
} 

} 
+0

"public int getAge(){ return this.age; }"を追加しないと、変数dogsAgeにどうなりますか?それはdogsAge機能がなければ完全にアクセスできないのですか? – Stepan

+0

main()関数がDogクラス内にあるため、上記のコードではアクセスできません。しかし、main()関数が別のクラスにある場合、 'age'プロパティが 'private'と宣言されているため、getAge()がなければアクセスできなくなります。代わりに 'public int age'を使用してgetAge()関数を使用せずにアクセスできるようにすることもできますが、一般的には貧弱な方法です。 – Chunko

2
class Dog { 
int age; //your mistake 
public Dog(int dogsAge){ 
this.age = dogsAge; 
} 
public void bark() { 
    System.out.println("Woof!"); 
} 

public void run(int feet) { 
    System.out.println("Your dog ran " + feet + " feet!"); 
} 

public static void main(String[] args) { 
    Dog spike = new Dog(3); 
    spike.bark(); 
    spike.run(spike.age); // How to change this? 
} 
+1

Dog.java:25:error:非静的変数です。これは静的コンテキストから参照できません。spike.run(this.age); //これを変更するには?^1エラー – Stepan

+1

これは正常に動作します。@StepanLenevich –

2

変数int ageを作成し、このようなコンストラクタでそれを初期化してください:

class Dog { 
    int age; 
public Dog(int dogsAge){ 
    this.age = dogsAge; 
    } 
関連する問題