建了两个类,却无法运行,请赐教我的想法哪里错了
第一个文件:Card.javapackage Pig;
public class Card {    public int CardNum;
    
    public Card(int i)
    {
        CardNum=i;
    }
}第二个文件:PlayCard.javapackage Pig;import java.util.Vector;
public class Playcard {    static Vector <Card> cards=new Vector();//创建一个静态VECTOR
    
    public Playcard()
    {
        for(int i=0;i<52;i++)
        {
        
            cards.addElement(new Card(i));添加52个Card类
        }
    }
    
    public static void main(String[] args)
    {
        System.out.println(cards.elementAt(1).CardNum);
        //打印每个Card里面的CardNum属性
    }
    
    }报错:
init:
deps-jar:
compile-single:
run-single:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0
        at java.util.Vector.elementAt(Vector.java:427)
        at Pig.Playcard.main(Playcard.java:29)
Java Result: 1
成功生成(总时间:0 秒)
研究了一下午,无法找到问题根源,请赐教.

解决方案 »

  1.   

    没搞清楚static的static Vector  <Card>  cards=new Vector();//创建一个静态VECTORSystem.out.println(cards.elementAt(1).CardNum);//cards只是一个空的Vector,楼主不要以为构造方法被调用了,元素被添加了,实际上没有,你可以断点,或者构造方法里加个输出语句看看效果
      

  2.   

    你程序的错误在于没有认识到对象创建的生命周期与静态对象的生命周期
    调用 System.out.println(cards.elementAt(1).CardNum); 
    的时候,并没有创建对象Playcard,
    因而:
            for(int i=0;i <52;i++) 
            { 
             
                cards.addElement(new Card(i));添加52个Card类 
            } 也不会执行。要想其得到执行,可这样修改main方法:
        public static void main(String[] args) 
        { 
            Playcard p = new Playcard();
            System.out.println(cards.elementAt(1).CardNum); 
            //或者:
             //System.out.println(p.cards.elementAt(1).CardNum);
            //打印每个Card里面的CardNum属性 
        } 
      

  3.   

    ????????不明白楼上的意思.我只是想打印一个VECTOR类里的元素,总是显示这个VECTOR的长度为0,为什么?
      

  4.   

    明白了三楼的意思,我回去试试,刚才那个回复是给2楼的...十分谢谢你.我这只是个测试类,真正的问题是在一个较大的项目里我做一个拱猪游戏,有一个CARD类,然后建立了52个,装进VECTOR,在界面GUI调用这个VECTOR的时候出现了类似问题,所以做了这个测试类,原来问题出在生命周期上,我回去好好研究下.
      

  5.   

    算我刚才说的是放屁吧
    你....你的代码没有创造PlayCard对象,你让他的构造函数怎么执行啊,怎么添加啊...你要这么改就可以了
    public class PlayCard 
    {
    static Vector  <Card>  cards=new Vector();//创建一个静态VECTOR 
        static
        {
         for(int i=0;i <52;i++) 
            { 
               cards.addElement(new Card(i));//添加52个Card类 
            } 
        }
         
        public static void main(String[] args) 
        { 
            System.out.println(PlayCard.cards.size()); 
            //打印每个Card里面的CardNum属性 
        } 
         
    或者是
    public static void main(String[] args) 
        { 
         PlayCard pc=new PlayCard();
            System.out.println(PlayCard.cards.elementAt(1).CardNum); 
            //打印每个Card里面的CardNum属性 
        } 
      

  6.   

    Vector最好少用,有了ArrayList还有什么理由用Vector?p.s.发现楼上的“老变态”挺可爱的呵呵。
      

  7.   

    vector是线程安全的,因此涉及到需要数据同步时最好用vector;同时,由于vector是线程安全的,也导致了他的效率不如ArrayList高。
      

  8.   

    对任何集合调用Collections.synchronizedCollection()方法都可使其变成线程安全的。
    总之,我一看到Vector,Stack,Hashtable等过时的类就很反感。