如何从数组中删除每个第三个元素作为循环?

时间:2017-08-14 08:21:18

标签: java arrays

添加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]

请帮忙

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]