Java сортировка четных и нечетных чисел

#java

#java

Вопрос:

Сейчас я нахожусь на уроке программирования в средней школе, и мои инструкции заключались в создании программы, которая хранит случайные числа в массиве, отсортированном по четным, а затем нечетным числам. Вот мой код до сих пор, я понятия не имею, почему он не работает. Он продолжает выводить 0, хотя я должен генерировать числа выше 1. Помощь будет с благодарностью, спасибо! : D

     Random rnd = new Random();

    int randomNumArray[] = new int[10];
    int evenArray[] = new int[10];
    int oddArray[] = new int[10];
    int countEven = 0,countOdd = 0;

    for (int i = 0; i < randomNumArray.length; i  )
    {
        randomNumArray[i] = rnd.nextInt(100)   1;
        System.out.println(randomNumArray[i]);
        
        if (randomNumArray[i] % 2 == 0)
        {
            evenArray[i] = randomNumArray[i];
            countEven  ;
        }
        else if (randomNumArray[i] % 2 == 1)
        {
            oddArray[i] = randomNumArray[i];
            countOdd  ;
        }
    }
    for (int i = 0; i < countEven; i  )
    {
        System.out.println(evenArray[i]);
    }
    for (int i = 0; i < countOdd; i  )
    {
        System.out.println(oddArray[i]);
    }
    
 

Комментарии:

1. Пожалуйста, уточните. В массиве четного размера нет среднего числа.

Ответ №1:

Проблема в том, что вы сохраняете значения в evenArray индексе и oddArray в индексе i , что не обязательно является «следующим неиспользуемым пространством» в массиве, в который вы записываете. Допустим, первое число (когда i = 0 ) четное, а второе (когда i = 1 ) нечетное; когда второе число сохраняется oddArray[i] = randomNumArray[i]; , оно будет сохранено с индексом 1, но это первое нечетное число, поэтому вместо него оно должно быть oddArray с индексом 0.

Чтобы решить эту проблему, вы можете использовать countEven и countOdd в качестве правильных индексов для записи; например, когда countOdd равно 0, тогда нечетных чисел еще нет, поэтому индекс 0 является правильным местом для записи первого. Таким образом, вы можете изменить эти две строки:

         if (randomNumArray[i] % 2 == 0)
        {
            // changed here
            evenArray[countEven] = randomNumArray[i];
            countEven  ;
        }
        else if (randomNumArray[i] % 2 == 1)
        {
            // changed here
            oddArray[countOdd] = randomNumArray[i];
            countOdd  ;
        }
 

Ответ №2:

Вы должны изменить эти строки

 evenArray[countEven] = randomNumArray[i];

oddArray[countOdd] = randomNumArray[i];
 

… вместо

 evenArray[i] = randomNumArray[i];

oddArray[i] = randomNumArray[i];