java - 如何让所有偶数先出现,然后奇数出现?

标签 java arrays

我遇到的问题是如何重新排列 int 值数组,以便所有偶数 值出现在所有奇数值之前。下面是我的编码:

   import java.io.*; 

  public class EvenAppearBeforeOdd {
// function to rearrange the array in given way. 
static void rearrangeEvenAndOdd(int arr[], int n) 
{ 
    // variables 
    int j = -1,temp; 

    // quick sort method 
    for (int i = 0; i < n; i++) { 

        // if array of element 
        // is odd then swap 
        if (arr[i] % 2 == 0) { 

            // increment j by one 
            j++; 

            // swap the element 
            temp = arr[i]; 
            arr[i] = arr[j]; 
            arr[j] = temp; 
        } 
    } 
} 

// Driver code 
public static void main(String args[]) 
{ 
    int arr[] = { 15, 9, 1, 3, 10, 5, 4, 8 }; 
    System.out.println("\n\nBefore\n");
    System.out.println(arr[]);
     try {
        System.out.println(EvenAppearBeforeOdd.rearrangeEvenAndOdd(arr);
    } catch (Exception e) {
        System.out.println("Error!!!");
   }
    int n = arr.length; 

    rearrangeEvenAndOdd(arr, n); 
  System.out.println("\n\nAfter\n");
    for (int i = 0; i < n; i++) 
        System.out.print(arr[i] + " "); 
} 
  } 

错误输出如下所示:

  run:
  C:\Users\User\AppData\Local\NetBeans\Cache\8.0.2\executor-snippets\run.xml:48: 
  Cancelled by user.
  BUILD FAILED (total time: 3 seconds)

实际上我想要如下的输出:

  run:


  Before

  15 9 1 3 10 5 4 8 


  After

  10 4 8 3 15 5 9 1 BUILD SUCCESSFUL (total time: 0 seconds)

希望有人能帮我检查一下我的代码哪部分错了?非常感谢。

最佳答案

下面给出的是生成与示例输入和输出相匹配的结果的答案:

public class EvenAppearBeforeOdd {    
    static void rearrangeEvenAndOdd(int arr[]) {
        int j = 0, temp;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % 2 == 0) {
                temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;
                j++;
            }
        }
    }
    static void printArray(int arr[]) {
        for(int i=0;i<arr.length;i++)
            System.out.print(arr[i]+"\t");
        System.out.println();
    }
    public static void main(String args[]) {
        int arr[] = { 15, 9, 1, 3, 10, 5, 4, 8 };
        System.out.println("Before:");
        printArray(arr);
        rearrangeEvenAndOdd(arr);
        System.out.println("After:");
        printArray(arr);
    }
}

你可以将你的答案与它进行比较,很容易找到错误。如果您仍有任何问题,请随时发表评论。

更新[2019年10月6日19:00]:

为了解决WJS提出的问题,rearrangeEvenAndOdd方法可以写成:

static void rearrangeEvenAndOdd(int arr[]) {
    int j, temp;
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] % 2 == 0) {
            temp = arr[i];
            j=i-1;
            while(j>=0 && arr[j]%2==1) {
                arr[j+1]=arr[j];
                j--;
            }
            arr[j+1]=temp;
        }
    }
}

但是,它不会生成与示例输入和输出匹配的结果,即对于输入数组为 { 15, 9, 1, 3, 10, 5, 4, 8 } 的结果将生成为 {10, 4, 8, 15, 9, 1, 3, 5},而不是您的示例输出,即 {10, 4, 8, 3, 15, 5, 9, 1}。

关于java - 如何让所有偶数先出现,然后奇数出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58258394/

相关文章:

TomEE 上的 Java Eclipselink 给出 "Missing required persistence.xml"

python - 如何向 numpy 数组添加名称而不更改其维度?

C 数组长度(填充)

php - 将序列化数组作为字符串进行搜索是否安全? (MySql查询)

javascript - 过滤器列表 - 根据计数键删除两个重复项中较小的一个

java - 使用Virtualbox的Hortonworks Hadoop-执行jar

java - 尝试使用简单的框架解析没有父节点的xml列表

c# - .NET 4.0 中的只读列表或不可修改列表

java - Dagger2 将应用程序拆分为多个 gradle 模块

arrays - 使用内部数组和另一个数组过滤对象数组