ArrayList中的错误记录更新时添加一个新的记录 [英] Erroneous update of ArrayList records when a new record is added

查看:96
本文介绍了ArrayList中的错误记录更新时添加一个新的记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建任务的一个表,并操纵其内容。我与我不明白,并寻求帮助非常感激的错误处理。我applogoze对这个问题的长度,而是试图把尽可能多的细节尽可能。

类的 tasksRepository 存储记录,这是在类构造的的taskdef ,因为数组列表。在 setTask ()和 getTask 方法中包含的add()和get()ArrayList类的方法。

的taskdef 使用本地set方法创建对象的参数。以下是一个例子,这样的方法:如果递送参数从所存储的值不同,将被存储的值和事件将被添加到所述日志记录。在任何情况下,一个成功的标志重新调校。

 公共静态布尔setProjectNumber(字符串projectNumberI)
{ // 一切
    如果(projectNumberI!= projectNumber)
    {
        projectNumber = projectNumberI;
        logAccumulator = logAccumulator +;项目编号(+ projectNumberI +);
    }
    返回true;
}私有静态无效setlog命令()
{//当所有的参数都设置,日志参数与时间标记更新
    串T = formatterFull.format(GregorianCalendar.getInstance()的getTime());
    登录日志= +\\ n+ T +:+ logAccumulator;
}

类的 tasksTableProcessing 包含任务操作。下面的内容包括构造函数。它是在一个简单的形式开始,但在调查过程中我改变了它。类的 taskStatus 是ENUM返回的字符串。该方法的 getLog ()只返回日志字段

 公共tasksTableProcessing()
{//构造函数。创建具有测试记录tableRepository对象
    tasksRepository.clearDb();    taskdef任务= NULL;
    任务=新的taskdef(P1000,01,taskStatus.started(),1,假,假);
    tasksRepository.addTask(任务);
    的System.out.println(\\ n日志0:\\ N+ tasksRepository.getTask(0).getLog());    任务= NULL;
    任务=新的taskdef(P1000,01,taskStatus.started(),2,假,真);
    tasksRepository.addTask(任务);
    的System.out.println(\\ n日志1:\\ N+ tasksRepository.getTask(1).getLog());    任务= NULL;
    任务=新的taskdef(P2000,02,关闭,63,真,假);
    tasksRepository.addTask(任务);
    的System.out.println(\\ n日志2:\\ N+ tasksRepository.getTask(2).getLog());    任务= NULL;
    任务=新的taskdef(P2000,02,关闭,64​​,真,真);
    tasksRepository.addTask(任务);
    的System.out.println(\\ n日志3:\\ N+ tasksRepository.getTask(3).getLog());
}

以下是日志。这表明,在引入一个新的记录,所有的旧记录将被更新。


  

    

日志0:


    
    

09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(01);状态(开始)


    
    

日志1:


    
    

09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(01);状态(开始)


    
    

09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(01);状态(启动);任务(任务2);任务ID(2);传递标志(真)


    
    

日志2:


    
    

09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(01);状态(开始)


    
    

09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(01);状态(启动);任务(任务2);任务ID(2);传递标志(真)


    
    

09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(01);状态(启动);任务(任务2);任务ID(2);传递标志(真);项目编号(P2000);任务(任务63);任务ID(63);所有者(O 2);状态(关闭);关键路径(真);传递标志(假)


    
    

日志3:


    
    

09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(01);状态(开始)


    
    

09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(01);状态(启动);任务(任务2);任务ID(2);传递标志(真)


    
    

09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(01);状态(启动);任务(任务2);任务ID(2);传递标志(真);项目编号(P2000);任务(任务63);任务ID(63);所有者(O 2);状态(关闭);关键路径(真);传递标志(假)


    
    

09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(01);状态(启动);任务(任务2);任务ID(2);传递标志(真);项目编号(P2000);任务(任务63);任务ID(63);所有者(O 2);状态(关闭);关键路径(真);传递标志(假);任务(任务64);任务ID(64);传递标志(真)


  

解决方案

鉴于方法签名,您存储任务定义为静态字段,而不是实例字段的成员。静态字段是类的taskdef本身的领域,而不是一个特定的taskdef实例的字段。

了解实例和类成员的阅读Java教程。

I am trying to create a table of tasks and manipulate its contents. I am tackling with a bug I don't understand, and be very thankful for help. I applogoze for the length of the question, but trying to bring as much details as possible.

The class tasksRepository stores the records, which are constructed in the class taskDef, as array list. The setTask () and getTask methods contains the add() and get() methods of the ArrayList class.

The taskDef object's parameters are created using local set methods. The following is an example to such method: If the delivered parameter differs from the stored value it will be stored value and the event will be added to the log record. In any case a success flag is retuned.

public static Boolean setProjectNumber(String projectNumberI)
{ // All the 
    if (projectNumberI != projectNumber)
    {
        projectNumber = projectNumberI;
        logAccumulator = logAccumulator + "; project number (" + projectNumberI + ")";
    }
    return true;
}

private static void setLog ()
{ // When all the parameters are set, the log parameter is updated with time tag
    String t = formatterFull.format(GregorianCalendar.getInstance().getTime());
    log = log + "\n" + t + ": " + logAccumulator;       
}

The class tasksTableProcessing contains the tasks manipulation. The following contains the constructor. It was started in a simpler form, but during the investigation I changed it. The class taskStatus is ENUM that returns strings. The method getLog () simply returns the log field

public tasksTableProcessing () 
{ // constructor. Creates the tableRepository object with test records
    tasksRepository.clearDb ();

    taskDef task = null; 
    task = new taskDef ("P1000", "O1", taskStatus.started (), "1", "false", "false");
    tasksRepository.addTask (task);
    System.out.println("\nLog 0: \n" + tasksRepository.getTask(0).getLog());

    task = null;
    task = new taskDef ("P1000", "O1", taskStatus.started(), "2", "false", "true");
    tasksRepository.addTask (task);
    System.out.println("\nLog 1: \n" + tasksRepository.getTask(1).getLog());

    task = null;
    task = new taskDef ("P2000", "O2", "closed", "63", "true", "false");
    tasksRepository.addTask (task);
    System.out.println("\nLog 2: \n" + tasksRepository.getTask(2).getLog());

    task = null;
    task = new taskDef ("P2000", "O2", "closed", "64", "true", "true");
    tasksRepository.addTask (task);
    System.out.println("\nLog 3: \n" + tasksRepository.getTask(3).getLog());
}

The following is the log. It shows that when a new record is introduced, all the old records are updated.

Log 0:

09/07/2012 10:21: ; project number (P1000); task (Task 1); task ID (1); owner (O1); status (started)

Log 1:

09/07/2012 10:21: ; project number (P1000); task (Task 1); task ID (1); owner (O1); status (started)

09/07/2012 10:21: ; project number (P1000); task (Task 1); task ID (1); owner (O1); status (started); task (Task 2); task ID (2); delivery flag (true)

Log 2:

09/07/2012 10:21: ; project number (P1000); task (Task 1); task ID (1); owner (O1); status (started)

09/07/2012 10:21: ; project number (P1000); task (Task 1); task ID (1); owner (O1); status (started); task (Task 2); task ID (2); delivery flag (true)

09/07/2012 10:21: ; project number (P1000); task (Task 1); task ID (1); owner (O1); status (started); task (Task 2); task ID (2); delivery flag (true); project number (P2000); task (Task 63); task ID (63); owner (O2); status (closed); critical path (true); delivery flag (false)

Log 3:

09/07/2012 10:21: ; project number (P1000); task (Task 1); task ID (1); owner (O1); status (started)

09/07/2012 10:21: ; project number (P1000); task (Task 1); task ID (1); owner (O1); status (started); task (Task 2); task ID (2); delivery flag (true)

09/07/2012 10:21: ; project number (P1000); task (Task 1); task ID (1); owner (O1); status (started); task (Task 2); task ID (2); delivery flag (true); project number (P2000); task (Task 63); task ID (63); owner (O2); status (closed); critical path (true); delivery flag (false)

09/07/2012 10:21: ; project number (P1000); task (Task 1); task ID (1); owner (O1); status (started); task (Task 2); task ID (2); delivery flag (true); project number (P2000); task (Task 63); task ID (63); owner (O2); status (closed); critical path (true); delivery flag (false); task (Task 64); task ID (64); delivery flag (true)

解决方案

Given the method signatures, you store the members of your TaskDefs as static fields, rather than instance fields. A static field is a field of the class TaskDef itself, and not a field of a specific TaskDef instance.

Read the Java tutorial about instance and class members.

这篇关于ArrayList中的错误记录更新时添加一个新的记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆