如何从数组中删除每三个元素作为循环?
Posted
技术标签:
【中文标题】如何从数组中删除每三个元素作为循环?【英文标题】:How to delete every third element as a loop from an array? 【发布时间】:2018-01-22 00:59:14 【问题描述】:将 6 个数字相加为 1,2,3,4,5,6 需要删除循环中相差2的值。
期望的结果:在第一个循环中删除 3,然后是 6,然后是 4,然后是 2,然后是 5,最后是 1。
这是我的代码:
while(array.length ! = 1)
for(int i =2; i<array.length; i=i+2)
array = ArrayUtils.remove(array, i);
System.out.println("Content of Array after removing an object : "
+ Arrays.toString(array));
得到结果为
移除对象后数组的内容:[1, 2, 4, 5, 6]
移除对象后的数组内容:[1, 2, 4, 5]
移除对象后数组的内容:[1, 2, 5]
移除对象后数组的内容:[1, 2]
请帮忙
【问题讨论】:
请向我们展示您目前的成果。 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出以及您实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQ 和How to Ask。 模是你的朋友 meta.***.com/questions/334822/… @NPE 共享 d 代码。 【参考方案1】:提供第二个示例运行将帮助我确定此代码是否有效,但到目前为止我已经完成了您想要的操作。我正在四处寻找未回答的 C# 问题,所以我很抱歉,但它是用 C# 编写的,而不是 Java。对不起,我的工作日结束了!
var myList = new List<int>()
1, 2, 3, 4, 5, 6
;
var broken = 0;
var step = 2;
while (myList.Count > 0)
for (var i = step; i < myList.Count; i += step)
if (broken == 1)
myList.RemoveAt(i);
myList.ForEach(x => Console.Write("0 ", x));
Console.Write("\n");
step--;
broken = 0;
continue;
if (!(i + step >= myList.Count))
myList.RemoveAt(i);
myList.ForEach(x => Console.Write("0 ", x));
Console.Write("\n");
else
myList.RemoveAt(i);
myList.ForEach(x => Console.Write("0 ", x));
Console.Write("\n");
broken = 1;
break;
输出是:
1 2 4 5 6
1 2 4 5
1 2 5
1 5
1
[list has no elements at this point]
【讨论】:
【参考方案2】:看起来,一旦数组减少到两个元素,您可能会收到 NullPointerException,因为您试图引用索引为“2”的元素(因为您设置 int i =2),但只有两个元素,而索引“2”将引用不存在的第三个元素。
一种方法是添加边缘情况条件。例如,当数组大小小于或等于 3 时,您可以创建一个 if 语句,并更改它删除的元素。
这里的问题不是代码问题,而是逻辑问题。
【讨论】:
以上是关于如何从数组中删除每三个元素作为循环?的主要内容,如果未能解决你的问题,请参考以下文章