Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java arraylist.add用最后一个值覆盖_Java_Arraylist - Fatal编程技术网

java arraylist.add用最后一个值覆盖

java arraylist.add用最后一个值覆盖,java,arraylist,Java,Arraylist,上这门课 public class ObjetoOS { private ArrayList<String> atribute = new ArrayList<String>(); public ObjetoOS (String a){ atribute.add(a); } public ObjetoOS (ArrayList<String> a){ atribute = a; } 我想不出我在哪里漏掉了重点。如果从ArrayL

上这门课

public class ObjetoOS {

private ArrayList<String> atribute = new ArrayList<String>();

public ObjetoOS (String a){
    atribute.add(a);
}

public ObjetoOS (ArrayList<String> a){
    atribute = a;
    }
我想不出我在哪里漏掉了重点。如果从ArrayList tablaOS或addAtributos方法中删除静态数据,则会出现错误


编辑:已解决!我更改了对象类,创建了一个新的空构造函数和一个方法,添加了一个带有for的字符串数组

它最终变成了一个循环

for (String s : newOnes){
    oldOnes.add(s);
    ObjetoOS nuevo = new ObjetoOS();
    nuevo.addAtribute(oldOnes);
    aux.add(nuevo);
    oldOnes.remove(s);

您的一些问题在于:

ArrayList<String> oldOnes= new ArrayList<String>(); // This line is pointless
oldOnes= os.getAtributo();                          // oldOnes will be overwritten here
    for (String s : newOnes)
    {
       oldOnes.add(s);
       ObjetoOS newObj = new ObjetoOS(oldOnes);
       aux.add(newObj );
       newObj = null;
       oldOnes.remove(s);
    }

我可以建议简化一些代码吗?如果您试图将属性添加到数组列表中,可以创建一个attributes类。你可以为atributos创建一个类,给它一些成员等等。。。并且可以很容易地更改为心房肌,并将其列为一个列表,以保存aritbutos。我建议这个班的名字叫Atributo。你试图在一节课上做很多事情。单一责任是关键。一个类定义atributo,另一个类存储atributo的列表。这将解决您的问题并简化您的代码。现在,您只能将10个成员存储到数组列表中,而无需指定要保存的元素数量。如果不这样做,它将只保留默认值10,最后一个元素将被重写

import java.util.ArrayList;

public class Atributos 
{
    // attributes list
    ArrayList<String> atributos = new ArrayList<String>();

    // add string to attributes list
    public void addAtributos(String atributo)
    {
        atributos.add(atributo);
    }

    // add list of strings to attribute list
    public void addAtributos(ArrayList<String> atributo)
    {
        for(String attr : atributo)
        {
            atributos.add(attr);
        }
    }
}
import java.util.ArrayList;
公共级心房肌
{
//属性列表
ArrayList atributos=新的ArrayList();
//将字符串添加到属性列表
公共无效addAtributos(字符串atributo)
{
心房肌。添加(心房肌);
}
//将字符串列表添加到属性列表
公共无效addAtributos(ArrayList atributo)
{
用于(字符串属性:atributo)
{
添加心房肌(attr);
}
}
}

对于使用英语工作的程序员来说,用另一种语言处理变量名有些困难。你能重构你的代码,使之有适当的英文命名的变量吗?意识到,一旦我发布它,修复:)解决了!我更改了对象类,创建了一个新的空构造函数和一个方法,添加了一个带有for的字符串数组。它最终用于(字符串s:newOnes){oldOnes.add(s);ObjetoOS nuevo=new ObjetoOS();nuevo.addAtribute(oldOnes);aux.add(nuevo);oldOnes.remove(s);是的,这基本上就是我最终要做的:)谢谢!欢迎,ArrayList atributos=new ArrayList();需要是ArrayList atributos=new ArrayList();否则,您将在数据类型上收到警告。它不会破坏您的代码,但不会标记警告。
ArrayList<String> oldOnes= new ArrayList<String>(); // This line is pointless
oldOnes= os.getAtributo();                          // oldOnes will be overwritten here
    for (String s : newOnes)
    {
       oldOnes.add(s);
       ObjetoOS newObj = new ObjetoOS(oldOnes);
       aux.add(newObj );
       newObj = null;
       oldOnes.remove(s);
    }
...
    for (ObjetoOS os : tableOS)
    {
        for (String s : newOnes)
        {
            ArrayList<String> oldOnesPlusNewOne = new ArrayList<>();
            oldOnesPlusNewOne.addAll(os.getAtributo());
            oldOnesPlusNewOne.add(s);
            ObjetoOS newObj = new ObjetoOS(oldOnesPlusNewOne);
            tableOS.add(newObj);
        }
    } 
import java.util.ArrayList;

public class Atributos 
{
    // attributes list
    ArrayList<String> atributos = new ArrayList<String>();

    // add string to attributes list
    public void addAtributos(String atributo)
    {
        atributos.add(atributo);
    }

    // add list of strings to attribute list
    public void addAtributos(ArrayList<String> atributo)
    {
        for(String attr : atributo)
        {
            atributos.add(attr);
        }
    }
}