反转加上数组的偶数和奇数

时间:2017-06-17 18:00:43

标签: java arrays for-loop

我是编程的新手。我正在尝试创建一个反向显示数组的程序。另外还可以找到数组的偶数和奇数,计算总数并显示偶数和奇数。代码可以工作,但问题是它还会反转偶数和奇数数组,并在这些数组中显示这个奇怪的零。我究竟做错了什么? 还请提供说明。谢谢!

 import java.util.Arrays;
 public class ArrayTest {

   public static void main(String[] args) 
  {
    int[] array = {1,2,3,4,5,6,7,8,9,10,11,12,13};
    for ( int i=0; i<array.length/2; i++ )
    {
        int temp = array[i];
        array[i] = array[array.length-(1+i)];
        array[array.length-(1+i)] = temp;
    }
    System.out.println("Array after reverse: \n" + Arrays.toString(array));

     int even=0;
     int odd=0;
     int[] Even = new int[13];
     int[] Odd = new int[13];
    for ( int i=0; i<array.length; i++)
    {
        if (array[i] % 2 == 0)
        {
            Even[i] = array[i];
            even++;
        }
        else
        {
            Odd[i] = array[i];
            odd++;
        }

    }
  System.out.println("Even: "+even+" ");
  System.out.println(Arrays.toString(Even));
  System.out.println("Odd:  "+odd+" ");
  System.out.println(Arrays.toString(Odd));

   }
}    

输出结果为:

反转后的数组:

[13,12,11,10,9,8,7,6,5,4,3,2,1]

偶:6

[0,12,0,10,0,0,0,6,0,4,0,2,0]

奇怪:7

[13,0,11,0,9,0,7,0,5,0,3,0,1]

3 个答案:

答案 0 :(得分:0)

你需要纠正你的逻辑

 int[] Even = new int[(array.length/2)+1];
 int[] Odd = new int[(array.length/2)+1];
for ( int i=0; i<array.length; i++)
{
    if (array[i] % 2 == 0)
    {
        Even[even] = array[i];
        even++;
    }
    else
    {
        Odd[odd] = array[i];
        odd++;
    }

}

根据您的代码,您正在为奇数和偶数初始化大小为13的数组,这是不正确的。

 int[] Even = new int[13];
 int[] Odd = new int[13];

因此,默认情况下,EvenOdd数组将由0值初始化。然后,您将根据主数组设置值,其大小为13备用(偶数/奇数)。

<强> ==更新==

因为,您不希望EvenOdd数组以相反的顺序排列。然后,您可以移动代码。

<强> >>Demo<<

答案 1 :(得分:0)

  1. 您可以从反转数组中选择偶数和奇数。
  2. 对偶数和奇数数组使用错误的索引。
  3. 如果您不想在输出中看到零,请使用print in for statement。另一种解决方案 - 首先计算奇数和偶数,并创建具有精确大小的数组。

    this.$nextTick(() => this.$refs.solutionDetails.showCurrent(command))
    

答案 2 :(得分:0)

你遇到了2个问题(我猜是这样)

  1. 奇数和偶数数组的顺序也相反

    原因:第一个For循环反转&#39;数组&#39;并将结果存储在数组本身中。所以,下次你尝试使用&#39; array&#39;为了找到奇数/偶数,你实际上正在使用反转数组。

    解决方案:您可以将原始阵列分配给备份阵列,并使用该备份阵列查找奇数和偶数。

  2. 不必要的零

    原因:在你的第二个for循环中你使用了奇数[i] = array [i],这似乎是你代码中的逻辑错误。考虑一下这个案例:

    i的值:0 1 2 3 4 5 ... 12

    数组[i]的值:1 2 3 4 5 6 ... 13

    odd [i]的值:1 0 3 0 5 0 ... 13

    even [i]的值:0 2 0 4 0 6 ... 0

  3. 这意味着,for循环中的控件将流向if {} block或else {}块而不是两者。因此,当if(条件)满足时,则甚至[i]数组将被更新。但同时奇数[i]阵列会发生什么?它保留了初始值&#39; 0。那就是它!

    我希望以下代码可以帮助您:

    import java.util.Arrays;
    public class A
    {
      public static void main(String[] args) 
      {
       int[] array = {1,2,3,4,5,6,7,8,9,10,11,12,13};
       int[] arr2 = new int[array.length];   // backup array
       arr2=Arrays.copyOfRange(array,0,array.length);
       for ( int i=0; i<arr2.length/2; i++ )
       {
        int temp = arr2[i];
        arr2[i] = arr2[arr2.length-(1+i)];
        arr2[arr2.length-(1+i)] = temp;
       }
       System.out.println("Array after reverse: \n" + Arrays.toString(arr2));
       int even=0;
       int odd=0;
       int[] Even = new int[13];
       int[] Odd = new int[13];
       for ( int i=0; i<array.length; i++)
       {
        if (array[i] % 2 == 0)
        {
            Even[even] = array[i];
            even++;
        }
        else
        {
            Odd[odd] = array[i];
            odd++;
        }
      }
      Even=Arrays.copyOfRange(Even,0,even);
      Odd=Arrays.copyOfRange(Odd,0,odd);
      System.out.println("Even: "+even+" ");
      System.out.println(Arrays.toString(Even));
      System.out.println("Odd:  "+odd+" ");
      System.out.println(Arrays.toString(Odd));
     }
    }   
    

    注意: 我使用 Arrays.copyOfRange(数组,开始,结束)函数从头开始复制数组的某个部分结束1位置。

    <强>输出:

    反转后的数组:

    [13,12,11,10,9,8,7,6,5,4,3,2,1]

    偶:6

    [2,4,6,8,10,12]

    奇怪:7

    [1,3,5,7,9,11,13]

    希望这有帮助:)

    - 马汉·马达夫