2016-12-09 11 views
0

学校プロジェクトでは、Dogs(名前、品種、年齢、体重)についてユーザから入力を受け取り、それらをArrayListに配置する単純なプログラムを作成することになっています。すべてが動作しているようですが、プログラムをテストするために、メソッドsetUp()にいくつかの犬を追加して、毎回新しい犬を追加しなくても機能をテストできるようにしたいと思います。私はconstuctorセットアップで(犬犬=新しい犬( "アレックス"、 "パグ"、10、10.0)を()書きした場合、私はエラーメッセージを取得:。コンストラクタにオブジェクトを追加するときに問題が発生する

The value of the local variable Dog is not used

私が試しました"1"の場合でもコンストラクタを置くと、エラーは発生しませんが、犬はarraylistに追加されませんが、プログラム内に新しい犬を追加することはできます。犬は割り当ての犬コンストラクタ(コードの部分が関連することが切り取られ、輸入心配またはメインない)に追加する必要がある。

class DogReg { 
private ArrayList<Dog> allDogs = new ArrayList<Dog>(); 
private Scanner keyboard = new Scanner(System.in); 

private void setUp() { 
    System.out.print("Hi! Welcome to the Dog register! \n" + "Choose an option between 1-5\n"); 
    System.out.println("1. Register your dog"); 
    System.out.println("2. Increase age"); 
    System.out.println("3. List"); 
    System.out.println("4. Delete"); 
    System.out.println("5. Exit"); 
} 

private void runCommandLoop() { 

    // Initierar en while-loop som körs under tiden att willRun == true 
    boolean willRun = true; 
    while (willRun == true) { 

     System.out.print("> "); 

     // Skapar en variabel som konverterar input-sträng till lowerCase 
     String command = keyboard.next(); 
     switch (command) { 

     case "1": 
      // Konstruerar en ny hund in i ArrayList 
      Dog Dog = new Dog(); 
      // Sparar all input till ArrayList 
      System.out.print("\nThe name of the dog: "); 
      Dog.setName(keyboard.next()); 
      System.out.print("The breed of the dog: "); 
      Dog.setBreed(keyboard.next()); 
      System.out.print("The age of the dog: "); 
      int age = keyboard.nextInt(); 
      Dog.setAge(age); 
      System.out.print("The weight of the dog: "); 
      double weight = keyboard.nextDouble(); 
      Dog.setWeight(weight); 
      allDogs.add(Dog); 
      break;  

クラス犬{

private String name; 
private String breed; 
private int age; 
private double weight; 

public Dog (String name, String breed, int age, double weight){ 
    this.name = name; 
    this.breed = breed; 
    this.age = age; 
    this.weight = weight; 
} 

public String getName() { 
    return name; 
} 

public String getBreed() { 
    return breed; 
} 

public int getAge() { 
    return age; 
} 

public double getWeight() { 
    return weight; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public void setBreed(String breed) { 
    this.breed = breed; 
} 

public void setAge(int age) { 
    this.age = age; 
} 

私は、私が代わりにこのコードを使用している場合)(セットアップで犬を追加することができますが、我々はそれを使用することになっていない:

Dog Dog = new Dog(); 
Dog.setName("Bosse"); 
Dog.setBreed("Mops"); 
int age = 10; 
Dog.setAge(age); 
double weight = 10; 
Dog.setWeight(weight); 
allDogs.add(Dog); 

は、私は謝罪、それは十分に明らかだホープ文法やスペル、英語は私の母国語ではありません。

+1

「Dog Dog = new Dog();」 - このような名前を付けなくても結局はあなたを混乱させ、バグを導入するでしょう。 。したがって、変数名は小文字で始める必要がある、つまりDog Dog = new Dog();というJava命名規則に従ってください。 - この行で何が起こるか考えてみましょう: 'Dog.setName(keyboard.next());' - 'Dog'はここにありますか?それはあなたが参照しているクラスか変数ですか?コンパイラはちょうど知ることができませんし、後でいつかあなたのコードをもう一度読むときには、おそらくどちらもしません。 – Thomas

+0

[Java命名規則](http://www.oracle.com/technetwork/java/codeconventions-135099.html)を尊重する必要があります。 'Dog dog = new Dog();' – jhamon

+1

エラーの原因について質問するといくつかのコードでは、正確かつ完全なエラーメッセージを投稿し、エラーを引き起こすコードを投稿します。他のコードではありません。 –

答えて

0

あなたのDog変数の名前を変更してください。変数の名前をオブジェクトの名前と同じにすると、コンパイラが混乱します。

+0

コメントありがとうございました! – zkulltrail

+0

@zkulltrailあなたが助けてくれる回答をアップヴォートするようにしてください。私の答えがあなたの問題を解決したら、チェックマークをクリックしてそれを受け入れることができます。サイトへようこそ! – Tophandour

+0

フォローアップの質問。私はケース1のために空のコンストラクタが必要です(私はより多くの犬を追加します)が、それを完全に空白のままにして安く感じます、それを行う別の方法はありますか? 編集:空のコンストラクタを使用していますが、変数に、ユーザーからのすべてのデータを収集し検討する可能性があり、あなたの犬のコンストラクタにそれらを置くことで、本質的には何も問題はあり – zkulltrail

関連する問題