当前位置: 首页 > 知识库问答 >
问题:

如何添加项目到ArrayList通过线程Java

喻元龙
2023-03-14

我想生成客户对象并将它们存储在ArrayList中,但我不能。

这是我的客户类

public class Customer {
private int customerID;
private int processTime;

ArrayList<Integer> customerIDList = new ArrayList<>();
ArrayList<Integer> processTimeList = new ArrayList<>();

public int getCustomerID() {
    return customerID;
}

public void setCustomerID(int customerID) {
    this.customerID = customerID;
}

public int getProcessTime() {
    return processTime;
}

public void setProcessTime(int processTime) {
    this.processTime = processTime;
}

public ArrayList<Integer> getCustomerIDList() {
    return customerIDList;
}

public void setCustomerIDList(ArrayList<Integer> customerIDList) {
    this.customerIDList = customerIDList;
}

public ArrayList<Integer> getProcessTimeList() {
    return processTimeList;
}

public void setProcessTimeList(ArrayList<Integer> processTimeList) {
    this.processTimeList = processTimeList;
} 
}

CustomerThread类生成客户对象10次,两个客户之间间隔100毫秒

public class CustomerThread extends Thread {
Customer c = new Customer();
Methods method = new Methods();

@Override
public void run() {

    for(int i = 1; i <= 10; i++) {
        try {
            //c.setCustomerID(i); 
            //c.setProcessTime(method.generateProcessTime());

            c.getCustomerIDList().add(i);
            c.getProcessTimeList().add(method.generateProcessTime());

            System.out.println("ID  : " + c.getCustomerIDList().get(i) + " - Process Time : " + c.getProcessTimeList().get(i));
            Thread.sleep(100);   
        }
        catch (InterruptedException ex) {
            Logger.getLogger(CustomerThread.class.getName()).log(Level.SEVERE, null, ex);
        }
    }   
} 
}

generateProcessTime的方法是生成随机整数,没有问题。这是我的测试课

public class Test {
public static void main(String[] args) {

    CustomerThread ct = new CustomerThread();

    ct.start();

}
}

当我执行这些时,会发生此错误,

线程“Thread-0”中的异常 java.lang.IndexOutOfBounds异常:索引:1,大小:1

共有1个答案

钱瑞
2023-03-14

您正在添加数字< code>1..10进入列表

c.getCustomerIDList().add(i);

但是您正在尝试检索索引 1..10 处的数字

c.getCustomerIDList().get(i)

但是列表是从< code>0开始索引的,这就是为什么您会得到< code > IndexOutOfBoundsException < br >您应该从< code>0开始迭代..9和增值< code>i 1:

for(int i = 0; i < 10; i++) {
  ...
  c.getCustomerIDList().add(i + 1);
  ...
 类似资料:
  • 我有下面的类,其中包含一个bank帐户的列表。我还有另一个问题,我用方法将许多银行帐户添加到特定的AssignmentIban中。但是问题是我有这个错误 java.lang.不支持操作异常:null atjava.util.AbstractList.add(AbstractList.java:148) atjava.util.AbstractList.add(AbstractList.java:1

  • 问题内容: 大家好。我正在制作一个词汇应用程序,需要在其中创建一个 (或ArrayList)。为此,我创建了以下代码(仅作为示例): 我还尝试了以下方法: 他们两个都将该项目添加到列表中,但是在调试时,我发现它的数组有12个对象,如下所示: 我的问题是我不能拥有这些空项目,因为此新列表是上的键,因此任何更改都将导致异常,因为该键将不存在。 使用调试器的列表(tempSOLUTION)详细信息的屏幕

  • 尽管awsmobile cli具有启用和配置AppSync后端的功能,如: 它很容易以完全不相关的配置告终:它在us-west-2(俄勒冈州)中创建DynamoDB表,即使我的项目位于eu-Central-1(法兰克福)。它是通过默认的“事件”图形模式实现的。毕竟,它不会作为后端功能出现在MobileHub项目控制台上。 现在,我想做的事情是通过控制台向AWS MobileHub项目添加AppSy

  • 我在这里试图实现的是,当用户选择ComboBox中的数据时,它会将其与我的HashMap匹配,并将其添加到ArrayList中。 代码有效。输出为: (用户从组合框中选择了 LOTR 1) 但是当我再次单击该按钮时,ArrayList会重置。我想要的是让ArrayList继续添加数据而不替换初始数据,即使它是重复的。例如: 基本上,用户可以从ComboBox中选择无数次,ArrayList不断添加

  • 我想知道是否有一个选项可以从表视图将添加到中。 我的程序经常更新 ,因此我想从中删除所有项,并将字符串变量名称添加到中。 我用JavaFX Scene Builder设置了我的程序。我的表有固定的id: cardsTable,我的Colum有id cardsColton。 有什么建议吗?

  • 我有一个模型类的,其中有一些项。如何将新项添加到的第一个位置,并将其他项移到旁边。