gpt4 book ai didi

java - 程序不会在前一次排序后对数组进行排序

转载 作者:行者123 更新时间:2023-12-01 20:20:07 24 4
gpt4 key购买 nike

这是我到目前为止所拥有的:

import java.util.*;
public class ProcessArray {

public static void main(String[] args) {

int[] arr = {3, 8, 1, 9, 2};
System.out.println(Arrays.toString(arr));
selectionSort(arr);
System.out.println(Arrays.toString(arr));
ProcessArray.oddArray(arr);
System.out.println(Arrays.toString(arr));
ProcessArray.evenArray(arr);
System.out.println(Arrays.toString(arr));

}

public static void selectionSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int index = 0;
for (int k = 0; k < arr.length - i; k++) {
if (arr[k] > arr[index]) {
index = k;
}
}
//swap
int tmp = arr[index];
arr[index] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = tmp;
}
}

public static int[] oddArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 0) {
arr[i] = arr[i];
}
}
return arr;
}

public static int[] evenArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 != 0) {
arr[i] = arr[i];
}
}
return arr;
}

}

由于某种原因,当我运行它时,我输出的是:

[3, 8, 1, 9, 2]
[1, 2, 3, 8, 9]
[1, 2, 3, 8, 9]
[1, 2, 3, 8, 9]

如何使奇数数组和偶数数组工作?因为逻辑是有道理的,至少对我来说是这样,但程序仍然只是打印从选择排序得到的输出。抱歉,如果这是基本的计算机科学知识,我们最近才开始学习排序。

最佳答案

嗯,您的代码几乎没有问题。

  • arr[i] = arr[i] 没有意义。由于 arr 是通过引用 ***Array 函数传递的,这意味着 main 中的 arr oddArray 内的 >arr完全相同相同的数组(相同的大小和元素)。因此,当您循环测试 %2!=0 并执行 arr[i]=arr[i] 时,您并没有真正更改 arr< 的内容 根本就没有。

  • 奇数测试应为%2!=0,偶数%2==0

现在我认为您想要做的是从原始数组中过滤奇数偶数数字。您要做的就是先计算奇数的数量,然后创建一个大小等于计数器的新数组,然后仅将 arr 中的奇数元素放入新数组中。

以下内容应该有效:

public static void main(String[] args) {

int[] arr = {3, 8, 1, 9, 2};
int[] res;
System.out.println(Arrays.toString(arr));
selectionSort(arr);
System.out.println(Arrays.toString(arr));
res = Test.oddArray(arr);
System.out.println(Arrays.toString(res));
res=Test.evenArray(arr);
System.out.println(Arrays.toString(res));

}


public static int[] oddArray(int[] arr) {
int c = 0;
for (int i = 0; i < arr.length; i++)
if (arr[i] % 2 != 0)
c++;
//c contains the number of odd number in arr
int[] arr_c = new int[c];
int ins=0;
for (int i = 0; i < arr.length; i++)
if (arr[i] % 2 != 0)
arr_c[ins++]=arr[i];
return arr_c;
}

public static int[] evenArray(int[] arr) {
int c = 0;
for (int i = 0; i < arr.length; i++)
if (arr[i] % 2 == 0)
c++;

int[] arr_c = new int[c];
int ins=0;
for (int i = 0; i < arr.length; i++)
if (arr[i] % 2 == 0)
arr_c[ins++]=arr[i];
return arr_c;
}

输出

[3, 8, 1, 9, 2]
[1, 2, 3, 8, 9]
[1, 3, 9]
[2, 8]

关于java - 程序不会在前一次排序后对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44952015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com