Java - 将奇数元素从数组复制到另一个元素

时间:2017-08-22 07:22:28

标签: java arrays algorithm

    this.blockHeights = new int[] { 1, 2, 1, 1, 2, 1, 2, 1 };

    int x = blockHeights.length/2;

    int leftSource[] = new int[x];
    System.out.println(x);
    int j = 0;

    for (int i = 0; i < x; i++)
    {
        if ((blockHeights[i]%2 == 0) || (i == 0)) //odd-elements
        {
            leftSource[i] = blockHeights[i];
        }

    }

    for (int i = 0; i < leftSource.length; i++)
    {
        System.out.println(leftSource[i]);
    }

输出为1,2,0,0。而我的目标是从数组blockHeights打印出第1,第3,第5和第7个元素并将其放入新数组leftSource。

5 个答案:

答案 0 :(得分:0)

添加i%2 != 0获得的元素,新数组只应具有原始数组的一半大小。你也必须运行循环,直到第一个数组结束,而不仅仅是一半。

请尝试以下代码。

this.blockHeights = new int[] { 1, 2, 1, 1, 2, 1, 2, 1 };

int x = blockHeights.length/2;

int leftSource[] = new int[x];
System.out.println(x);
int j = 0;

for (int i = 0; i <  blockHeights.length; i++) //changed this line
{
    if (i%2 != 0) //odd-elements //changed this line
    {
        leftSource[j] = blockHeights[i]; //changed this line
        j++;//changed this line
    }

}

for (int i = 0; i < leftSource.length; i++)
{
    System.out.println(leftSource[i]);
}

答案 1 :(得分:0)

int x = blockHeights.length / 2;中,您将x设置为blockHeights长度的一半,因此在第一个for循环中,您将迭代数组的左半部分。变化

for (int i = 0; i < x; i++)

for (int i = 0; i < blockHeights.length; i++)

您还需要检查i是奇数还是偶数,而不是数组中的元素

for (int i = 0; i < lockHeights.length; i++) {
    if (i % 2 == 0)
    {
        leftSource[i / 2] = blockHeights[i];
    }
}

答案 2 :(得分:0)

如果你想将奇数索引成员复制到一个新数组(无论它们的值如何),就像你说的那样 - 第1,第3,第5和第7 - 那么试试这个:

this.blockHeights = new int[] { 1, 2, 1, 1, 2, 1, 2, 1 };

    int x = blockHeights.length/2;

    int leftSource[] = new int[x];
    System.out.println(x);
    //go over the larger array and skip by 2
    for (int i = 0; i < blockHeights.length; i=i+2)
    {  
       leftSource[i/2] = blockHeights[i];
    }

    for (int i = 0; i < leftSource.length; i++)
    {
        System.out.println(leftSource[i]);
    }

答案 3 :(得分:0)

变化

        if ((blockHeights[i]%2 == 0) || (i == 0)) //odd-elements

        if(i%2 != 0) //odd-elements

或者您可以更改for循环

    for (int i = 1; i < x; i+=2)
{
        leftSource[i] = blockHeights[i];
}

答案 4 :(得分:-1)

你看看元素的值,检查它是否奇怪,但它是否是你想要的奇数位置,所以你需要存储在leftSource中的下列位置,但是得到的值超过2

for (int i = 0; i < x; i++)
         leftSource[i] = blockHeights[i * 2];
//1 1 2 2

打印数组的便捷方法是:System.out.println(Arrays.toString(leftSource)); //[1,1,2,2]

如果您执行for (int i = 0; i < x; i = i + 2),您将获得良好的价值,但只有第一和第三,并且有空位