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);
}
}
}