Найдите паритетные кодовые войны - PullRequest
1 голос
/ 29 апреля 2019

Так что я решил пойти в codewars, чтобы немного освежить Java, и мне нужно решить эту проблему:

Вам дан массив (который будет иметь длину не менее 3, номожет быть очень большим), содержащим целые числа.Массив либо целиком состоит из нечетных целых чисел, либо полностью состоит из четных целых чисел, за исключением одного целого числа N. Напишите метод, который принимает массив в качестве аргумента и возвращает этот «выброс» N.

Вот мой тестслучаи:

public class OutlierTest{
         @Test
         public void testExample() {
             int[] exampleTest1 = {2,6,8,-10,3}; 
             int[] exampleTest2 = {206847684,1056521,7,17,1901,21104421,7,1,35521,1,7781}; 
             int[] exampleTest3 = {Integer.MAX_VALUE, 0, 1};
             assertEquals(3, FindOutlier.find(exampleTest1));
             assertEquals(206847684, FindOutlier.find(exampleTest2));
             assertEquals(0, FindOutlier.find(exampleTest3));
         }}

И вот код, который я использовал для решения проблемы:

            public class FindOutlier{
              static int find(int[] integers){

              int numerOfOdds = 0;
              int numberOfEvens = 0;
              int integerOutlier;


                for(int i = 0; i < integers.length ;i++){
                  if ( integers[i]%2 == 0){
                    numberOfEvens++;
                  }else{
                    numerOfOdds++;
                  }  
                }

                if ( numberOfEvens > numerOfOdds){
                  integerOutlier = 1;    
                }else{
                  integerOutlier = 0;
                }

                for(int i = 0; i < integers.length; i++){
                  if ((integers[i]%2) == integerOutlier){
                    return integers[i];
                  }
                }

              return 0;
            }}

По сути, код выполняет циклическое прохождение по массиву для нахождения внешней четности.Затем снова циклы, чтобы определить внешнее целое числоЭтот код проходит все тестовые случаи.Однако, когда я пытаюсь отправить код, он говорит, что он ожидает -3, но получил 0.

Может кто-нибудь помочь мне найти ошибку в моей логике здесь?Это немного расстраивает, потому что не говорит мне, для какого массива его тестируют, поэтому я не могу отследить свой код, чтобы найти ошибку.

Извините за опечатки, и если они не самый эффективный код, явероятно, использовал бы ArrayLists, но кажется, что CodeWars не допускает ArrayLists ...

1 Ответ

2 голосов
/ 29 апреля 2019

Что ж, в вашей математике есть ошибка: -3 % 2 == -1, поэтому, когда отрицательное нечетное число является выбросом, оно терпит неудачу. Измените свой второй цикл на

for(int i = 0; i < integers.length; i++){
  if (Math.abs(integers[i]%2) == integerOutlier){
    return integers[i];
  }
}
...