Java 递增数组';b';接收到数组输入后';a';

Java 递增数组';b';接收到数组输入后';a';,java,arrays,Java,Arrays,我试图在方法调用后写入数组的内容 例: 我试着把每次迭代的每个函数的输出写在纸上。但无法理解该方法的工作原理 public static void mystery(int[] a) { int[] b = new int[2]; for (int i = 0; i < a.length; i++) { if (a[i] >= 0) { int x = a[i] % 2;

我试图在方法调用后写入数组的内容

例:



我试着把每次迭代的每个函数的输出写在纸上。但无法理解该方法的工作原理

    public static void mystery(int[] a) {
        int[] b = new int[2];
        for (int i = 0; i < a.length; i++) {
            if (a[i] >= 0) {
                int x = a[i] % 2;
                b[x]++;
                a[i] = b[x];
            }
        }
    }
公共静态无效神秘(int[]a){
int[]b=新的int[2];
for(int i=0;i=0){
int x=a[i]%2;
b[x]++;
a[i]=b[x];
}
}
}

数组
a1
的预期输出是
{1,2}
,但我试图理解在新数组中达到这些值的过程。

此循环修改数组
a
的所有非负元素:

  • x确定a[i]是偶数(0)还是奇数(1)
  • b[x]++递增偶数(0)或奇数(1)元素的计数器
  • 如果a[i]是第n个偶数,则分配给它n个数字
  • 如果a[i]是第m个奇数,则分配给它的是数字m

因此,对于由两个奇数组成的输入数组——{7,5},输出将是{1,2},因为7是第一个非负奇数,5是第二个非负奇数。

该方法按以下方式工作:

它保存b[0]中所有非负偶数和b[1]中所有非负奇数的计数

现在,它修改数组“a”中的非负数,使其现在表示如下: 如果a[i]是偶数,那么它现在表示它是第n个偶数 如果a[i]是奇数,那么它现在表示它是第m个奇数

或者换句话说

b[0]给出数组“a”中所有非负偶数的计数 b[1]给出数组“a”中所有非负奇数的计数 a[i]现在是以前遇到的所有非负偶数/奇数的计数,包括a[i]

由于现有值被覆盖,无法确定[i]是否给出偶数或奇数。您需要一份原件a[i]的副本才能确定


请注意,如果“a[i]”为负数,则不会对其进行任何更改

您不理解代码的哪一部分?有没有一句话让你感到困惑?因为每一行都很简单。
int[] a3 = {0, 0, 0, 1, 1, 1};

mystery(a3);
int[] a5 = {-1, 1, -2, 16, 3, -3, -4, 5);

mystery(a5);
    public static void mystery(int[] a) {
        int[] b = new int[2];
        for (int i = 0; i < a.length; i++) {
            if (a[i] >= 0) {
                int x = a[i] % 2;
                b[x]++;
                a[i] = b[x];
            }
        }
    }