首页 文章

蜜 jar 样品测试奇数问题

提问于
浏览
1

因此,在Honeypot网站上公开了一个样本测试,我对其中一个测试感到困惑 .

1 <= 1 <= r <= 10 ^ 5

我是起始号码

r是结束号码

测试是返回l和r之间的所有奇数,包括l和r,如果它们恰好是奇数 .

这是我运行的函数中的代码,并期望整数的arraylist作为返回值:

List<Integer> arraylist = new ArrayList<Integer>();

    for (int i = 0; i < r - l + 2; i++) {
        if ((l + i % 2) == 1)
            arraylist.add(l + i);
    }

    return arraylist;

这段代码通过了12个测试用例中的8个,它使测试用例7-10失败了,但它没有显示失败的测试用例 .

我只是对这个失败的测试用例感到好奇,因为我似乎无法弄明白 .

在什么样的环境中,这段代码无法按照它的目的去做?

谢谢 .

3 回答

  • 2

    如果范围在 1 之后开始(即 l > 1 ), (l + i % 2) == 1 ,其被评估为 (l + (i % 2)) == 1false . (l + (i % 2)) == 1 只有 l == 1i 是偶数才能为真 .

    你应该使用的是 ((l + i) % 2) == 1 .

    此外,循环的条件应该是:

    i < r-l+1
    

    请注意,如果您只是将 il 迭代到 r ,那么您的代码可以更具可读性(并且更不容易出错):

    for (int i=l; i<=r; i++){
        if((i%2)==1)
            arraylist.add(i);
    }
    
  • 0

    你有两个错误:

    • (l + i % 2) :这将首先计算 i % 2 然后将其添加到 l ,这是错误的

    • r - l + 2 :这应该改为 r - l + 1

    这将有助于您:

    for (int i = 0; i < r - l + 1; i++) {
        if (((l + i) % 2) == 1) arraylist.add(l + i);
    }
    
  • 1

    您不必在每个号码上应用 %2 . 试试以下:

    List<Integer> arraylist = new ArrayList<Integer>();
    if(l % 2 == 0) l += 1;
    for(int i=l; i<=r; i += 2){
      arraylist.add(i);
    }
    return arraylist;
    

相关问题