javaを勉強しているのですが、以下のプログラムで誤った答えが出力される理由がいまいちわかりません。
プログラムとしては、動物の種類の鳴き声をそれぞれカウントするというものですが、その回数が誤って出力されます。
以下出力です。
Woof
Meow
Meow
Woof
Woof
5 woofs and 5 meow
このようになってしまいます。
正解は以下のようになります。
Woof
Meow
Meow
Woof
Woof
3 woofs and 2 meow
以下コードです。
abstract class Animal { private static int count; public static void increment() { count++; } public static int getCount() { return count; } abstract void noise(); } class Dog extends Animal { public Dog() {}; public void noise() { System.out.println("Woof"); increment(); } } class Cat extends Animal { public Cat() {}; public void noise() { System.out.println("Meow"); increment(); } } public class Counter{ public static void main(String[] args) { Animal[] a = {new Dog(), new Cat(), new Cat(), new Dog(), new Dog()}; for (int i = 0; i < a.length; i++) a[i].noise(); System.out.println(Dog.getCount() + " woofs and " + Cat.getCount() + " meow"); } }
そこで、
private static int count; public static void increment() { count++; } public static int getCount() { return count; }
をAnimalクラスから削除し、DogとCatクラスにそれぞれ入力したら正しい答えが出力されました。
これはなぜなんでしょうか。なぜ鳴いた回数はDogとCatでそれぞれカウントされないんでしょうか。
回答1件
あなたの回答
tips
プレビュー