有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在整数数组中只对奇数排序,而将偶数保留在其原始位置?

基本上,这是一个在线挑战,你必须以升序排列数组中的奇数,同时忽略偶数。例如,[3,1,4,2,3,6]将是->;[1,3,4,2,3,6]. 我已经写了一个算法来对数字进行排序,但是输出是错误的

import java.util.Arrays;

public class Kata {
    public static int[] sortArray(int[] array) {

        int n;
        int temp = 0;
        if (array.length < 2){
            System.out.println(Arrays.toString(array));
            return array;
        }

        for (n = 1; n < array.length; n++) { // iterates through array
            if (array[n] % 2 != 0 && array[n] > array[n-1] && array[n-1] % 2 != 0){ // if n is odd and smaller than n-1 and n-1 is odd
                temp = array[n];
                array[n] = array[n-1];
                array[n-1] = temp;

            }
            else if (array[n] % 2 == 0 && array[n] < array[n-1]){
                array[n] = array[n];
            }
            else if (array[n] % 2 != 0 && array[n] > array[n-1]){
                array[n] = array[n];
            }

        }
        System.out.println(Arrays.toString(array));
        return array;

    }
}

驱动程序代码

public class Driver {
    public static void main(String[] args) {

       Kata.sortArray(new int[]{3,1,11,2,9});
      
    }
}

对于上面的数组,输出应该是:[1,3,9,2,11],而不是[3,11,1,2,9]。我已经盯着这个看了很久了,老实说,我被难住了。非常感谢您的阅读


共 (1) 个答案

  1. # 1 楼答案

    我使用一个内部循环来查找下一个要排序的奇数。我使用了一个额外的外循环,因为通常排序需要两个循环

    import java.util.Arrays;
    
    public class Kata {
    public static int[] sortArray(int[] array) {
        int i;
        int n;
        int m;
        int temp = 0;
        if (array.length < 2) {
            System.out.println(Arrays.toString(array));
            return array;
        }
    
        for (i = 0; i < array.length; i++) {
            for (n = 0; n < array.length; n++) {
                if (array[n] % 2 != 0) {
                    for (m = n + 1; m < array.length; m++) {
                        if (array[m] % 2 != 0) {
                            if (array[n] > array[m]) {
                                temp = array[n];
                                array[n] = array[m];
                                array[m] = temp;
                            }
                            break;
                        }
                    }
                }
            }
        }
        System.out.println(Arrays.toString(array));
        return array;
    }
    }