【问题标题】:Find The Parity Outlier CodeWars查找奇偶校验异常值 CodeWars
【发布时间】:2019-09-18 11:29:53
【问题描述】:

所以我决定去 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...

【问题讨论】:

  • 一个帮助您跟踪它的示例数组相当明显:您知道奇数输出需要是 -3(从错误消息中),所以只需添加一些任意偶数:{-3, 0, 2} ,例如。

标签: java outliers parity


【解决方案1】:

嗯,你的数学有一个错误:-3 % 2 == -1,所以当一个负奇数是异常值时,它会失败。将第二个循环更改为

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

【讨论】:

  • 感谢您的建议!我认为 mod 运算符返回所有正整数,因为我在 Google calc 中尝试了一个负数。下次我一定会在不同的环境中测试我的价值观
  • 很高兴它有帮助,它可能发生在我身上。处理数学时,请始终在代码中进行测试。编程语言往往在处理数字的边缘情况方面具有欺骗性。也许二进制是一个错误:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 2015-06-29
  • 2013-06-25
相关资源
最近更新 更多