0

我正在做一些编程作业,有点迷茫。该项目是选择列表数组的偶数/奇数元素并存储在另一个数组中。它不是每个元素中的偶数,而是元素本身,因此如果数组具有值“1,2,5,7,9”并返回偶数元素,它将给出“1,5,9”。还必须使用递归。谁能给我一个起点或一些建议。虽然关于从 2 个元素开始并获取第 2 个元素,然后从中构建,但不知道它将如何添加到第 2 遍

 public static ArrayList<Integer> even(ArrayList<Integer> list)
 ArrayList<Integer> evenlist = ListMethods.deepClone(tList);//make copy of list
 if (evenlist.size()<=1)    // The list is empty or has one element
 {
//        return null;// Return the list as is
 }

if 
(evenlist.size()==2)
{
 //return right element
 //call method again
 //add to list
}
4

3 回答 3

2

伪代码

int[] evens,odds;

 function categorize(List<Integer> in,int idx)
   if(idx>=in.length)
         return
   int cur = in[idx]
   if(even), add to evens
   else add to odds
    categorize(in,idx+1)
于 2013-02-17T15:00:47.823 回答
1

您可以使用这样的简单for循环:

for (int i = 0; i < list.size(); i += 2) {
    System.out.println(list.get(i));
}

如果您必须使用递归,这里是您可能采取的步骤的概要。(我不会告诉你具体该怎么做,因为你什么都没试过,这就像家庭作业。)

  1. 获取第一个元素并存储它
  2. 从列表中删除(新)第一个元素
  3. 打电话给自己
于 2013-02-17T14:54:12.463 回答
1

这听起来和我刚刚完成的作业很相似,所以如果是(而且你在我班!),我不会告诉你使用我们没有涵盖的任何术语,因为我知道尝试发现可能会令人生畏一些新的实践(超出我们必须做的)。

首先,设置退出条件。正如您已经说过的,您必须从现有的 ArrayList 中创建一个新的。您将从现有的 ArrayList 中删除项目,存储偶数(或奇数)索引处的整数,直到列表为空。

所以你的退出条件是:

if (evenList is Empty)
    return evenList;

然后,逐步完成这些步骤。我建议确定您开始的数组是否有奇数步数,如下所示:

if (evenList has Even Elements)
    int holderForIntsAtEvenElements = last evenList EVEN element

请注意,我们从最后一个元素开始,因此当您退出递归方法时,这将是添加到新 ArrayList 中的最后一个元素,因此它将按数字顺序排列。你可能会觉得这篇文章很有趣:这个布尔返回是什么意思?

然后我们想从列表中删除最后一个元素并再次递归调用该方法。

最后,当我们达到退出条件并开始出现时,我们想要将我们一直存储的整数添加到它们中,例如:

evenList.add(holderForIntsAtEvenElements);
return evenList;

这并不能解决一个问题,如果列表没有偶数个元素,那么如何处理第一个元素 - 但是,我会让你尝试解决这个问题!这是代码和伪代码的良好组合,有望帮助您走上正轨。

于 2013-02-17T15:44:22.157 回答