Java Vector输出错误

时间:2015-06-09 21:30:04

标签: java vector output

我的问题是,当我在Vector中添加例如3个输入时,当我显示结果时,我只找到了最后一个输出。

XMLTable,Table,Column = classes
cols:包含问题的向量

代码:

btnSave.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            XMLTable xt= new XMLTable();
            Table table = new Table();
            Column col = new Column();
            Vector<String> txtF = new Vector<String>();
            Vector<String> comboF = new Vector<String>();
            Vector<Column> cols = new Vector<Column>();
            Component[] comp = columns.getComponents();
            for(Component c : comp){
                if (c instanceof JTextField){
                    txtF.add(((JTextField) c).getText());
                    //col.setName(((JTextField) c).getText());  
                }
                else if(c instanceof JComboBox){
                    comboF.add(((JComboBox<String>) c).getSelectedItem().toString());
                    //col.setType(((JComboBox<String>) c).getSelectedItem().toString());
                }

            }
            for(int i=0; i<txtF.size();i++){
                col.setName(txtF.get(i));
                //System.out.println("NAMEE: "+txtF.get(i));
                col.setType(comboF.get(i));
                //System.out.println("Type: "+comboF.get(i));
                cols.add(col);
            }


            for(int i=0;i<cols.size();i++){                 
                System.out.println("Column : "+i);
                System.out.println("name : "+cols.elementAt(i).getName());
                System.out.println("type : "+cols.elementAt(i).getType());
            }

INPUT:

name : a  Type : String
name : b  Type : Numeric
name : c  Type : String

输出:

Column : 0
name : c
type : String
Column : 1
name : c
type : String
Column : 2
name : c
type : String

1 个答案:

答案 0 :(得分:0)

您将同一个对象一遍又一遍地添加到cols,因为col始终是同一个对象。请记住,您通过引用处理对象(eventhough Java is alway pass-by-value,如果将对象传递给方法,则实际传递对象引用,而不是对象本身)。要解决此问题,请删除第五行中Column col = ...的声明,然后将第二个for loop更改为:

[...]
for(int i=0; i<txtF.size();i++){
    Column col = new Column(); // Declaration moved to here
    col.setName(txtF.get(i));
    //System.out.println("NAMEE: "+txtF.get(i));
    col.setType(comboF.get(i));
    //System.out.println("Type: "+comboF.get(i));
    cols.add(col);
}
[...]

这可以解决您的问题。