添加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]
请帮忙
答案 0 :(得分:1)
看起来,一旦数组下降到两个元素,你可能会收到NullPointerException,因为你试图引用索引为'2'的元素(因为你设置了int i = 2),但是只有两个元素和索引'2'将指不存在的第三个元素。
一种方法是添加边缘情况。例如,您可以在数组大小小于或等于3时创建if语句,并更改它删除的元素。
这里的问题不是代码问题,而是逻辑问题。
答案 1 :(得分:0)
提供第二个示例运行将帮助我确定此代码是否有效,但我到目前为止做了你想做的事情。我正在四处寻找未解答的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]