日期:2014-05-20  浏览次数:20813 次

虚心请教一个问题,不知道这个程序错在哪里。
Java code
package c11;
import java.util.*; 
class Pet {} 
class Dog extends Pet {} 
class Pug extends Dog {} 
class Cat extends Pet {} 
class Rodent extends Pet {} 
class Gerbil extends Rodent {} 
class Hamster extends Rodent {} 

class Counter { int i=1; } 

public class PetCount { 
    static String[] typenames = { 
       "Pet", "Dog", "Pug","Cat", 
       "Rodent", "Gerbil", "Hamster", 
    }; 
    public static void main(String[] args) { 
       Vector pets = new Vector(); 
       try { 
           Class[] petTypes = { 
              Class.forName("c11.petcount.Dog"), 
              Class.forName("c11.petcount.Pug"), 
              Class.forName("c11.petcount.Cat"),
              Class.forName("c11.petcount.Rodent"), 
              Class.forName("c11.petcount.Gerbil"), 
              Class.forName("c11.petcount.Hamster"),          }; 
           for(int i = 0; i < 15; i++)
               pets.addElement(petTypes[(int)(Math.random()*petTypes.length)].newInstance()); 
        } catch(InstantiationException e) {} 
           catch(IllegalAccessException e) {} 
           catch(ClassNotFoundException e) {} 
        Hashtable h = new Hashtable(); 
        for(int i =0; i < typenames.length; i++) 
           
            h.put(typenames[i], new Counter());
            
        for(int i = 0; i < pets.size(); i++) { 
            Object o = pets.elementAt(i); 
            if(o instanceof Pet) 
               ((Counter)h.get("Pet")).i++; 
            if(o instanceof Dog) 
                ((Counter)h.get("Dog")).i++;
            if(o instanceof Pug) 
               ((Counter)h.get("Pug")).i++; 
            if(o instanceof Cat) 
               ((Counter)h.get("Cat")).i++; 
            if(o instanceof Rodent) 
               ((Counter)h.get("Rodent")).i++; 
            if(o instanceof Gerbil) 
           ((Counter)h.get("Gerbil")).i++; 
            if(o instanceof Hamster) 
               ((Counter)h.get("Hamster")).i++; 
        } 
        for(int i = 0; i < pets.size(); i++) 
            System.out.println( 
               pets.elementAt(i).getClass().toString()); 
        for(int i = 0; i < typenames.length; i++) 
            System.out.println( 
              typenames[i] + " quantity: " + 
            ((Counter)h.get(typenames[i])).i); 
     } 
  }

输出结果是:Pet quantity: 1
Dog quantity: 1
Pug quantity: 1
Cat quantity: 1
Rodent quantity: 1
Gerbil quantity: 1
Hamster quantity: 1
正确的结果应该不可能全是1啊,至少有几个是出现过几次的。问题出在哪里啊?

------解决方案--------------------
如果有问题就是class.forName的问题了
我看你的包名是package c11;
但是里面用的却是c11.petcount.Dog
------解决方案--------------------
再试了一把 确实是class.forName中包名的错误才有下面的结果
Pet quantity: 1
Dog quantity: 1
Pug quantity: 1
Cat quantity: 1
Rodent quantity: 1
Gerbil quantity: 1
Hamster quantity: 1

------解决方案--------------------
原因是下面的代码回抛异常,ClassNotFoundException
Java code

Class[] petTypes = { 
              Class.forName("c11.petcount.Dog"), 
              Class.forName("c11.petcount.Pug"), 
              Class.forName("c11.petcount.Cat"),
              Class.forName("c11.petcount.Rodent"), 
              Class.forName("c11.petcount.Gerbil"), 
              Class.forName("c11.petcount.Hamster"),

------解决方案--------------------
Java code
Class[] petTypes = { 
              Class.forName("c11.Dog"), 
              Class.forName("c11.Pug"), 
              Class.forName("c11.Cat"),
              Class.forName("c11.Rodent"), 
              Class.forName("c11.Gerbil"), 
              Class.forName("c11.Hamster"),};