如何在java中将数组中的数字排序为两个不同的数组?

时间:2012-09-03 21:21:37

标签: java arrays for-loop

我必须创建一个程序,它接受偶数和奇数的数组,并将所有偶数放入一个数组,将所有奇数放入另一个数组。我使用for循环遍历所有数字并确定它们是偶数还是奇数,但我遇到的问题是因为原始数组中的数字是随机的,我不知道偶数的大小或奇数阵列因此无法弄清楚如何将原始数组中的数字分配给偶数/奇数数组,而不会留下一堆点,或者没有足够的点用于所有数字。有任何想法吗?

7 个答案:

答案 0 :(得分:4)

尝试使用ArrayList。你可以使用

num % 2 == 0

查看num是偶数还是奇数。如果它确实== 0那么它是偶数,否则它是奇数。

List<Integer> odds = new ArrayList(); 
List<Integer> evens = new ArrayList();

for (int i = 0; i< array.length; i++) {
   if (array[i] % 2 == 0) {
      evens.add(array[i]);
   }
   else {
       odds.add(array[i]);
   }
}

将ArrayLists转换回您可以执行的数组

int[] evn = evens.toArray(new Integer[evens.size()]);

(注意:未经测试的代码可能会有一些拼写错误)

编辑:

如果不允许使用ArrayLists,请考虑以下仅使用Arrays的内容。它不像原始数组的两次传递那样有效率

int oddSize = 0; 
int evenSize = 0; 

for (int i = 0; i< array.length; i++) {
   if (array[i] % 2 == 0) {
      evenSize++;
   }
   else {
      oddSize++;
   }
}


Integer[] oddArray = new Integer[oddSize];
Integer[] evenArray = new Integer[evenSize];

int evenIdx = 0;
int oddIdx = 0;

for (int i = 0; i< array.length; i++) {
   if (array[i] % 2 == 0) {
      evenArray[evenIdx++] = array[i];
   }
   else {
      oddArray[oddIdx++] = array[i];
   }
}

答案 1 :(得分:1)

你可以不使用数组或任何&#39;%&#39;只是一个简单的想法

input = new Scanner(System.in);
    int x;
    int y = 0; // Setting Y for 0 so when you add 2 to it always gives even
                // numbers
    int i = 1; // Setting X for 1 so when you add 2 to it always gives odd
                // numbers
    // So for example 0+2=2 / 2+2=4 / 4+2=6 etc..
    System.out.print("Please input a number: ");
    x = input.nextInt();

    for (;;) { // infinite loop so it keeps on adding 2 until the number you
                // input is = to one of y or i
        if (x == y) {
            System.out.print("The number is even ");
            System.exit(0);
        }
        if (x == i) {
            System.out.print("The number is odd ");
            System.exit(0);
        }
        if (x < 0) {
            System.out.print("Invald value");
            System.exit(0);
        }
        y = y + 2;
        i = i + 2;

    }

}

答案 2 :(得分:0)

请改用List。然后你不需要提前声明尺寸,它们可以动态增长。

如果您确实需要数组,则可以随后在toArray()上使用List方法。

答案 3 :(得分:0)

上述答案是正确的,并描述了人们通常如何实现这一点。但是你对问题的描述让我觉得这是一个类别的类别,动态列表可能不受欢迎。

所以这是另一种选择。

将数组排序为分为两部分 - 奇数和偶数。然后计算有多少奇数/偶数,并将值复制到两个数组中。

这样的事情:

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

}

public static void main(final String[] args) {
    final int[] numbers = { 1, 3, 5, 2, 2 };
    insertionSort(numbers);

    int i = 0;
    for (; i < numbers.length; i++) {
        if (numbers[i] % 2 != 0) {
            i--;
            break;
        }
    }

    final int[] evens = new int[i + 1];
    final int[] odds = new int[numbers.length - i - 1];
    if (evens.length != 0) {
        System.arraycopy(numbers, 0, evens, 0, evens.length);
    }
    if (odds.length != 0) {
        System.arraycopy(numbers, i + 1, odds, 0, odds.length);
    }

    for (int j = 0; j < evens.length; j++) {
        System.out.print(evens[j]);
        System.out.print(" ");
    }
    System.out.println();
    for (int j = 0; j < odds.length; j++) {
        System.out.print(odds[j]);
        System.out.print(" ");
    }
}

答案 4 :(得分:0)

两次遍历源数组。第一次通过,计算奇数和偶数的数量。从那里,您将知道两个目标阵列的大小。创建它们,并在源数组中进行第二次传递,这次将每个值复制到其相应的目标数组。

答案 5 :(得分:0)

我想象两种可能性,如果你不能使用Lists,你可以迭代两次来计算偶数和奇数的数量,然后用这些大小构建两个数组并再次迭代以在每个数组中分配数字,但这个解决方案是慢而丑。

我想象另一个解决方案,只使用一个数组,包含所有数字的相同数组。您可以对数组进行排序,例如在左侧设置偶数,在右侧设置奇数。然后你有一个索引与数组中的位置分开这两个部分。在同一个数组中,您有两个带有数字的子数组。当然使用有效的排序算法。

答案 6 :(得分:0)

使用以下代码:

public class ArrayComparing {

    Scanner console= new Scanner(System.in);
    String[] names;
    String[] temp;
    int[] grade;

    public static void main(String[] args) {
        new ArrayComparing().getUserData();
    }

    private void getUserData() {
        names = new String[3];    
        for(int i = 0; i < names.length; i++) {
            System.out.print("Please Enter Student name: ");
            names[i] =console.nextLine();
            temp[i] = names[i];
        }

        grade = new int[3];    
        for(int i =0;i<grade.length;i++) {
            System.out.print("Please Enter Student marks: ");
            grade[i] =console.nextInt();
        }          

        sortArray(names);     
    }

    private void sortArray(String[] arrayToSort) {
        Arrays.sort(arrayToSort);

        getIndex(arrayToSort);
    }

    private void getIndex(String[] sortedArray) {
        for(int x = 0; x < sortedArray.length; x++) {
            for(int y = 0; y < names.length; y++) {
                if(sortedArray[x].equals(temp[y])) {
                    System.out.println(sortedArray[x] + " " + grade[y]);
                }
            }
        }
    }
}