2011-09-28 57 views
0

我读取一个.ini文件,并将每个属性放到一个临时数组中,我将它放在一个向量中 - 直到这里工作正常。java - vector总是有相同的结果

但如果我要访问每个数组中的向量,我总是得到相同的结果,这是不可能的。我用不同的方式,不同的循环,一切都不同,但总是相同的结果试了一下,这是我的实际工作代码:

tmp2 = new String[2]; 
    for(Enumeration e=allPropertys.elements(); e.hasMoreElements();) { 
     tmp2 = (String[])e.nextElement(); 
     for(int i = 0; i < tmp2.length; i++) 
     { 
      System.out.println(tmp2[i]); 
     } 
    } 

而且这里是我把什么东西都往载体代码:

try { 
     tmp = new String[2]; 

     prop = new Properties(); 
     prop.load(new FileReader("konfig.ini")); 

     Enumeration e = prop.propertyNames(); 
     while (e.hasMoreElements()) { 

      String key = (String)e.nextElement(); 
      String value = prop.getProperty(key); 
      tmp[0] = key + " " + value; 
      tmp[1] = value; 

      System.out.println("Property: " + tmp[0] + " und Value: " + tmp[1]); 
      allPropertys.add(tmp); 
     } 
    } 
+0

无法从您发布的代码中分辨出来。谁认为编写旧式的Java是一个好主意? – duffymo

+2

你确定把不同的数组放进去了吗?与您在循环中就地更新的相同阵列相反? – Thilo

+0

感谢您的回答,我不是很成Java,所以我不知道你的意思是用旧式:(什么对不起 – Martin

回答

6

我的猜测是,当你填充你的向量时,你会为每个属性重复使用相同的字符串数组。这使得你载体包含10次(10为条目的数量)相同的阵列:

String[] property = new String[2]; 
for (every line in the file) { 
    property[0] = ...; 
    property[1] = ...; 
    vector.add(property); 
} 

这应该

for (every line in the file) { 
    String[] property = new String[2]; 
    property[0] = ...; 
    property[1] = ...; 
    vector.add(property); 
} 

此外,请注意在您的代码段被替换,创建一个新的字符串数组初始化您的tmp2变量,然后将其值替换为向量中的值。初始化是不必要的。

+0

现在的工作 - 我真的不明白为什么,因为没有我重写数组的内容每次我运行循环 – Martin

+0

+1有关非必要的初始化 – helios

+0

您覆盖日评论? e数组的内容,但每次都重复使用相同的数组。该向量包含一个指向你的数组的指针。它不会复制其内容。因此,如果每行都使用相同的数组,则向量会保存10个指向同一数组的指针,该指针包含文件最后一行的内容。 –

0

您正在更换该数组中,并把极同一阵列到收集一次又一次。

您必须了解对象和数组的工作原理。你认为将它添加到集合中会复制它或什么(这就是为什么在读取部分的循环之前初始化数组,我认为)。它只是增加了参考。你总是使用参考。

您必须创建要添加它每次新的数组。将数组变量(或任何对象变量)想象为对象的引用。作为真正的事物的箭头。当你将它添加到矢量中时,你将向内存中的相同结构添加箭头(同样的两个桶)。

+0

我明白了,谢谢您的评论! – Martin

相关问题