我正在处理一个问题,我有一个输入整数列表,如{0,3,6,9,12,18,21,24,27,33,39 }。我需要通过分析原始列表来创建一个新列表,如果我找到3的倍数序列,那么该序列的第一个元素和最后一个元素都将被添加到该列表中。该序列的第一个元素和最后一个元素之间的元素都不会被添加。任何其他元素(没有连续3的倍数)将被添加。因此,对于{0,3,6,9,12,18,24,27,30,39,45}的输入列表,我的输出结果应该是[0,12,18,24,30,39,45]。请注意,我的第一个3的倍数序列是0,3,6,9,12;所以根据我的要求,新的列表有0,12个。因为18没有任何一边相差3的邻居,所以它是这样加的。类似地,24,27,30被添加为24,30。此外,类似于18,39和45这样添加。下面是我的代码片断:从另一个列表的连续元素动态创建新列表
int difference = 3;
public static List<Integer> parseList(List<Integer> input, int difference) {
List<Integer> output = new ArrayList<Integer>();
for (int i = 0; i < input.size()-1; i++) {
// Check if subsequent element values differ by specific difference
if ((input.get(i+1) - input.get(i)) == difference) {
output.add(input.get(i));
output.add(input.get(i+1));
}
else {
output.add(input.get(i));
}
}
return output;
}
我的得到的输出是:0 3 3 6 6 9 9 12 12 18 24 27 27 30 30 39 同样,我期望的输出是:[0,12,18,24 ,30,39,45] 请注意,不仅我得到中间重复值,我也失去了最后一个值(ie45)。
你期待该代码输出你想要的输出?现在它所做的是检查两个相邻的数字是否相差3,并将两者都加到输出中,从而得到结果输出。您必须存储起始值,直到下一个值_doesn't_相差3,然后添加开始值和结束值。就像你所描述的那样。而且你没有得到最后的值,因为你永远不会把它添加到列表中。你的循环只能达到input.size() - 2. – Radiodef