java 为什么我的数组在偶数值之后返回奇数值,而它应该只返回偶数值?

mbyulnm0  于 2022-12-02  发布在  Java
关注(0)|答案(2)|浏览(174)

因此,该方法应该进入数组,选择正数,然后将这些偶数存储在另一个数组中。
我试过调试检查,试过在if语句中切换值,但什么都不起作用。我对处理数组还是个新手,所以如果我错过了一个非常简单的解决方案,我道歉。

public static void main(String[] args)
    {
    int [] arr = {2, 1, 4, 3, 6, 5, 8, 7};
    int[] arr3 = {1, 2, 1, 2, 3, 4, 5, 1, 2, 3};
    int[] arrEvens;
    arrEvens = removeEvens(arr);
    System.out.println("\nNew array of even values: ");
    for (int i : arrEvens)
        System.out.print(i + " ");
    System.out.println();

    arrEvens = removeEvens(arr3);
    System.out.println("\nNew array of even values: ");
    for (int i : arrEvens)
        System.out.print(i + " ");
    System.out.println();
public static int[] removeEvens(int[] arr)
{
int[] newArr = arr;
int count = 0;
for(int i = 0; i < arr.length; i++)
{
        if (arr[i] % 2 == 0)
    {
        newArr[count] = arr[i];
        count++;
    }
}
return newArr;
}

对于arr和arr3,它应该只输出2468和2242,但实际上分别输出24686587和2242345123
km0tfn4u

km0tfn4u1#

首先,要在removeEvens方法中创建newArr,你需要知道arr中有多少个偶数,但为此你需要遍历数组并计算偶数。

public static int[] removeEvens(int[] arr)
    {
        int[] newArr;
        int count = 0;
        for (int j : arr) {
            if (j % 2 == 0) {
                count++;
            }
        }

        newArr = new int[count];
        count = 0;
        for (int i: arr){
            if (i % 2 == 0){
               newArr[count++] = i;
            }
        }

        return newArr;
    }

在此解决方案中,您将遍历数组两次。
还有另外一种解决办法:

public static int[] removeEvens(int[] arr)
{
    int[] newArr = new int[arr.length];
    int count = 0;
    for (int j : arr) {
        if (j % 2 == 0) {
            newArr[count++] = j;
        }
    }
    
    if (count < arr.length) newArr[count] = -1;
    
    return newArr;
}

首先,你将创建newArr的长度作为arr的长度。在newArr中插入偶数,并在偶数的末尾标记为-1。在main方法中,要打印返回的数组,请执行以下操作:

public static void main(String[] args) {
    int[] arr = {2, 1, 4, 3, 6, 5, 8, 7};
    int[] arr3 = {1, 2, 1, 2, 3, 4, 5, 1, 2, 3};
    int[] arrEvens;
    arrEvens = removeEvens(arr);
    System.out.println("\nNew array of even values: ");
    for (int i : arrEvens) {
        if (i == -1) break;
        System.out.print(i + " ");
    }
    System.out.println();

    arrEvens = removeEvens(arr3);
    System.out.println("\nNew array of even values: ");
    for (int i : arrEvens) {
        if (i == -1) break;
        System.out.print(i + " ");
    }
}
rekjcdws

rekjcdws2#

与内存分配相关的输出原因。请阅读堆和堆栈内存部分。您认为您创建了newArr,但得到的是前一个数组本身。newArrarr只是数组的名称。它们存储在堆栈内存中。但此数组的值存储在堆内存中,并且这两个数组都绑定到存储在堆中的一个数组。
如果需要新数组,则需要使用new int[n]创建。

相关问题