当前位置: 代码迷 >> J2SE >> 虚心请教一个有关问题,不知道这个程序错在哪里
  详细解决方案

虚心请教一个有关问题,不知道这个程序错在哪里

热度:234   发布时间:2016-04-24 12:35:19.0
虚心请教一个问题,不知道这个程序错在哪里。
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"),};
  相关解决方案