我遇到的问题是如何重新排列 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/