Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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_Java - Fatal编程技术网

在Java中添加到ArrayList

在Java中添加到ArrayList,java,Java,我是Java开发新手,我尝试了以下程序: List<String> myList = new ArrayList<String>(); for(int i = 0;i<ProductNumber;i++) { myList.add( mProducts[i].Name); } mProducts[1].Name = "Hello"; 有人能告诉我发生了什么事吗 这是我编写的代码: public clas

我是Java开发新手,我尝试了以下程序:

    List<String> myList = new ArrayList<String>();
    for(int i = 0;i<ProductNumber;i++)
    {
       myList.add( mProducts[i].Name);
    }
    mProducts[1].Name = "Hello";
有人能告诉我发生了什么事吗

这是我编写的代码:

    public class xmlParsing 
    {   
    private final static String XML_FILE_NAME = "Configuration.xml";
    private final static String PRODUCT_NODE = "product";
    private final static String TASK_NODE = "task";
    private final static String NAME_ITEM = "name";
    private final static String DURATION_ITEM = "duration";
    private final static String RATE_ITEM = "rate";

    private static int ProductNumber = 0;
    private static int TaskNumber = 0;
    private static Product mProducts[] = new Product[Product.MAX_PRODUCT_NUMBER];

    public xmlParsing()
    {
    }

    public void parseXML ()
    {
        Product[] Products = new Product[Product.MAX_PRODUCT_NUMBER];
        try 
        {
            File xmlFile = new File(XML_FILE_NAME);
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);
            doc.getDocumentElement().normalize();
            NodeList productsNode = doc.getElementsByTagName(PRODUCT_NODE);
            ProductNumber = productsNode.getLength();
            Product mproduct = new Product();
            Task mtask = new Task();
            for (int i = 0; i < productsNode.getLength(); i++) 
            {
                Node productNode = productsNode.item(i);
                if (productNode.getNodeType() == Node.ELEMENT_NODE) 
                {
                    Element element1 = (Element) productNode;
                    mproduct.Name = getValue(NAME_ITEM, element1);
                    NodeList tasksNode = element1.getElementsByTagName(TASK_NODE);
                    TaskNumber = tasksNode.getLength();
                    Task[] Tasks = new Task[Task.MAX_TASKS_NUMBER];
                    for (int j = 0; j < tasksNode.getLength(); j++) 
                    {
                        Node taskNode = tasksNode.item(j);
                        if (taskNode.getNodeType() == Node.ELEMENT_NODE) 
                        {
                            Element element2 = (Element) taskNode;
                            mtask.Name = getValue(NAME_ITEM, element2);
                    mtask.Duration = Double.parseDouble(getValue(DURATION_ITEM, element2));
                            mtask.Rate = Double.parseDouble(getValue(RATE_ITEM, element2));
                            Tasks[j] = new Task(mtask);
                        } 
                    }
                    mproduct.Tasks = Tasks;
                    Products[i] = new Product(mproduct);
                }
            }
        } 
        catch (Exception ex) 
        {
            ex.printStackTrace();
        }
        mProducts = Products;
    }

    private static String getValue(String tag, Element element) 
    {
        NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();
        Node node = (Node) nodes.item(0);
        return node.getNodeValue();
    }

    public static List<String> getProdcutNames() 
    {
       String ps[] = new String[ProductNumber];
       List<String> myList = new ArrayList<String>();
       for(int i = 0;i<ProductNumber;i++)
       {
           ps[i] =  mProducts[i].Name;
           myList.add(new String(mProducts[i].Name));
       }
        mProducts[2].Name = "Hello";
       return myList;
    }

    public int getProductNumber()
    {
        return ProductNumber;
    }

    public int getTasktNumber()
    {
        return TaskNumber;
    }
    }

    public class Task {
    public static final int MAX_TASKS_NUMBER = 100;
    public String Name;
    public double Duration;
    public double Rate;

    public Task(){
        Name = "";
        Duration = 0;
        Rate = 0;
    }

    public Task(Task t){
        Name = t.Name;
        Duration = t.Duration;
        Rate = t.Rate;
    }

    }

    public class Product {
    public static final int MAX_PRODUCT_NUMBER = 200;
    public String Name;
    public Task[] Tasks;

    public Product(){
        Name = "";
        Tasks = null;
    }

    public Product(Product p){
        Name = p.Name;
        Tasks = p.Tasks;
    } 
    }


    public class Production {

    public static void main(String[] args) {
        xmlParsing parser = new xmlParsing();
        parser.parseXML();
        for(int i=0;i<parser.getProductNumber();i++)
            System.out.println(parser.getProdcutNames().get(i));

    }
    }
公共类xml解析
{   
私有最终静态字符串XML\u FILE\u NAME=“Configuration.XML”;
私有最终静态字符串PRODUCT\u NODE=“PRODUCT”;
私有最终静态字符串TASK_NODE=“TASK”;
私有最终静态字符串名称\u ITEM=“NAME”;
私有最终静态字符串持续时间\u ITEM=“持续时间”;
私有最终静态字符串速率\u ITEM=“RATE”;
私有静态int ProductNumber=0;
私有静态int TaskNumber=0;
私有静态产品MPProducts[]=新产品[Product.MAX_Product_NUMBER];
公共XML解析()
{
}
公共空解析XML()
{
Product[]Products=新产品[Product.MAX_Product_NUMBER];
尝试
{
文件xmlFile=新文件(XML文件名);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
Document doc=dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
NodeList productsNode=doc.getElementsByTagName(产品节点);
ProductNumber=productsNode.getLength();
产品MPProduct=新产品();
任务mtask=新任务();
对于(int i=0;i对于(int i=0;i看起来
mProducts
myList
是指同一个对象,但在您给出的代码中,这是不可能发生的。您是否简化了代码,删除了类似
mProducts=myList
的内容?

像这样更改您的代码,应该可以达到目的

List<String> myList = new ArrayList<String>();
for(int i = 0;i<ProductNumber;i++)
{
   myList.add( new String(mProducts[i].Name));
}
mProducts[1].Name = "Hello";
List myList=new ArrayList();

对于(int i=0;i感谢您发布完整的代码。问题是您在
main()
中多次调用
getProdcutNames()
(顺便说一句,您在那里的名称有输入错误)
-每次在
main
中循环调用
getProdcutNames()

for(int i=0;i<parser.getProductNumber();i++)
    System.out.println(parser.getProdcutNames().get(i));

无法复制您的行为。发布代码示例可能会有所帮助。我猜myProducts包含名称值为“a”、“Hello”和“C”的条目。您是否要打印MPProducts?使用实际代码,问题将永远不会重现,因为
String
实例是不可变的。您的代码中一定有错误,或者执行其他操作,例如隐藏变量,从而导致此问题。或者
mList.Name
MPProducts.Name
引用相同的问题object@A.E.Drew:但是Java字符串是不可变的。@RichieHindle除非我弄错了,否则我在数组和列表中看到对对象实例中的字段的赋值?
String
引用不是不可变的…@owlstead引用不是不可变的,但是更改引用不会影响实际对象。@owlstead:
myList
是字符串数组,而不是对象实例数组。@user1955287无论您如何尝试这些小更改,问题都出在未发布的代码中。@user1955287-不确定“未发布的代码”是什么意思。如果您仔细查看myList.add(新字符串(MPProducts[I].Name)),我做了一个小更改。在代码中,您正在传递对列表的引用,这意味着myList和MPProducts[i]中的对象。Name将指向同一个对象,这就是我将其更改为新字符串(MPProducts[i].Name)的原因
List<String> myList = new ArrayList<String>();
for(int i = 0;i<ProductNumber;i++)
{
   myList.add( new String(mProducts[i].Name));
}
mProducts[1].Name = "Hello";
for(int i=0;i<parser.getProductNumber();i++)
    System.out.println(parser.getProdcutNames().get(i));
List<String> names = parser.getProdcutNames();
for(int i = 0; i < names.size() ;i++)
    System.out.println(names.get(i));