【问题标题】:Why is my first array list being changed to match my second array list为什么我的第一个数组列表被更改以匹配我的第二个数组列表
【发布时间】:2019-07-21 03:47:09
【问题描述】:

任务是从一个包含整数的列表创建两个数组列表。新列表计算增加的​​整数数量,然后计算减少的整数数量。然后我要添加两个“计数”数组列表以获得一个包含上/下总和的列表。向上计数正确生成,然后向下计数正确生成,但是当创建向下计数时,向上计数被更改以匹配向下计数,所以我的总数是错误的。我不明白为什么第二个数组列表会自动更改第一个数组列表。

System.out.println("input list " + list);

// create an object to use the runList method to create the array list that will represent the runs list
temp listRunCount = new temp();
ArrayList<Integer> list_2 = new ArrayList<Integer>();
list_2=listRunCount.runLists(list);
System.out.println("zero list: " + list_2);
// create an object to use the listRunUpCount method to find all the run up elements of the input array list
ArrayList<Integer> listRunUpCount = new ArrayList<Integer>();
listRunUpCount=listRunCount.findRuns(list, list_2, RUN_UP);
System.out.println("Run up   list "  + listRunUpCount);
// create an object to use the listRunUpCount method to find all the run up elements of the input array list
ArrayList<Integer> listRunDownCount = new ArrayList<Integer>();
listRunDownCount=listRunCount.findRuns(list, list_2,RUN_DOWN);
System.out.println("Run Down list " + listRunDownCount);


//Method for counting

    public ArrayList<Integer> findRuns(ArrayList<Integer> list, ArrayList<Integer> lRCT,int pDir){
    ArrayList<Integer> listRunCountTemp = lRCT;
    int i=0, k=0;
    final int RUNS_UP = 10;
    final int RUNS_DOWN = 20;
    while(i<list.size()-1) 
    {
        if(pDir == RUNS_UP && list.get(i)<= list.get(i+1)) 
        {
            k++;
        }
        if(pDir == RUNS_DOWN && list.get(i)>= list.get(i+1))
        {
            k++;
        }
        else
        {
            if(k!=0) 
            {
                listRunCountTemp.set(k-1,listRunCountTemp.get(k-1)+1);
                k=0;
            }
        }
        i++;
    }
         return listRunCountTemp;
}

数组生成后的输出

Reading file...
input list [1, 2, 3, 4, 5, 4, 3, 5, 6, 7, 9, 8, 7, 6, 5, 4, 3, 5, 6, 7]
zero list: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Run up   list [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Run Down list [0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Run up   list [0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

【问题讨论】:

  • 这是一个 ArrayList,而不是两个。 ArrayList&lt;Integer&gt; listRunCountTemp = lRCT; 创建一个新变量,但不是一个新列表。
  • 该方法是一种旧方法,无法正确计算运行次数,此方法有效

标签: java arraylist methods


【解决方案1】:

基本问题:

listX = listY;

不创建新列表,也不将 listY 复制到 listX 中;它只是提供了对现有列表的附加引用。

findRuns 返回作为1RCT 传递给它的列表。

findRuns 的每次调用都将list_2 作为该参数传递。

因此listRunUpCountlistRunDownCount 指的是同一个列表(list_2)。在调用findRuns 之前为每个变量分配新的ArrayList 并不重要;这些列表没有被使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2021-05-01
    • 2021-12-31
    相关资源
    最近更新 更多