import java.util.Random;
import java.util.*;public class week {
int Year ,Month, Day;
String Date;
static Vector vt = new Vector(); 
Random r = new Random();

public void setDate()
{
    this.Year =Math.abs(r.nextInt()%200)+1900;
this.Month =Year%12+1;
this.Day =Year%30+1;
this.Date =Year+"-"+Month+"-"+Day;
}
public void printDate(){
    System.out.println("总共有"+vt.size());
for(int i=0;i<vt.size();i++){
this.Date=(String)vt.get(i);
System.out.println(this.Date);
//System.out.println(this.Date);
//System.out.println("===");
}
}

public static void main(String[] args){
    week w = new week();
for(int i=0;i<10;i++){    
try{
    w.setDate();
vt.add(i,w.Date);
//w.printDate();
//System.out.println("目前有"+vt.size()+"个对象");
}
catch(Exception e)
{
    System.out.println("add error  "+e.getMessage());
}
}
w.printDate();
}
}

解决方案 »

  1.   

    感谢 liuyi820729(JessonLiu) 。我想问问,你是用方法来获得date,我是用构造函数,为什么我的有问题?是逻辑上的问题吗?希望高手能解答一下。
      

  2.   

    向量列表我也并不很熟,只是处于我的想法.有可能是因为在向量列表中并不是存储的是一段内存地址,而只是存储指向某段内存地址的一个标签.所以你的程序当中表面上像是生成了10个不同的对象,但对于向量列表来说它只认一个w,最后一次就覆盖了前面9次,最后取出的都是同一个值!
    以上仅为个人看法,我的Java也是刚刚入门,还请真正的高手指点指点!
      

  3.   

    就下面的程序:
       for(int i = 0; i < 100; i++) {
            Random r = new Random();
            System.out.println("i="+i+"  "+System.currentTimeMillis()+" "+(r.nextInt()%200));
       }
    先想一下结果,再试一下,你可能就会发现你的程序问题所在了. 在慢的机器上...
    把你的: for(int i=0;i<10;i++) 改成 while(vt.size() < 10) ...
      

  4.   

    我运行了你那段代码,和我想的一样,也就是和我最上面的程序是一样的结果。重复10次的时候基本都是同一个结果,100次的时候就开始有些不一样了,不过还是大块大块的重复。
    突然明白了,需要System.gc();哈,谢谢指点