【问题标题】:Java - copying odd elements from array to anotherJava - 将奇数元素从数组复制到另一个
【发布时间】:2017-08-22 07:22:27
【问题描述】:
    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。

【问题讨论】:

  • 你检查了错误的奇怪:你说你想从数组中打印出第一个、第三个、第五个和第七个元素,所以你应该检查索引是否 很奇怪。但是,您使用 (blockHeights[i]%2 == 0) 检查的是 value 是否为奇数。
  • 你只是奖励最后回答的人,并可能从其他人那里激发他的回答,很棒 ^^ 从 5 个答案中他是最后一个^^

标签: java arrays algorithm


【解决方案1】:

如果您想将奇数索引成员复制到一个新数组(无论它们的值如何),就像您所说的 - 第 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]);
    }

【讨论】:

  • @RamishKhan 请看看谁先回答,谁激发了他的回答,请^^
  • @RamishKhan,我很高兴它有帮助。
【解决方案2】:

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];
    }
}

【讨论】:

  • 您将缺少元素,并且数组中为空白/java.lang.ArrayIndexOutOfBoundsException 您将得到 ;)
  • 一开始所有人都错了,除了我,现在我已经纠正了你,我们都差不多^^
【解决方案3】:

添加您使用i%2 != 0 获得的元素,新数组也应该只有原始数组的一半大小。此外,您 Loop 必须运行到第一个 Array 的末尾,而不仅仅是运行到一半。

试试下面的代码。

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]);
}

【讨论】:

  • 好的,所以您的代码打印 0201 而不是 1122,它们是 Ramish Khan 提出的“第 1、第 3、第 5 和第 7 个元素”;)
  • @azro 那不可能。零应该从哪里来?
  • 我让你试试;)因为空位;)因为你对两者都使用相同的索引;)看我上面的答案
  • @azro 感谢您指出这一点。我改变了我的代码
  • 你的代码看起来有点复杂,不需要两个变量和一个if ;)
【解决方案4】:

改变

        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];
}

【讨论】:

    【解决方案5】:

    您查看元素的值,检查它是否为奇数,但它是您想要的奇数位置,因此您需要存储在 leftSource 的以下位置,但值 1 大于 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 &lt; x; i = i + 2),您将获得良好的价值,但只有第一和第三,并且有空位

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 2018-04-19
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多