Return给定范围内较大的值

Return the larger value in the in the given range

当我在练习 Coding bat 时,我遇到了这个问题,我被卡住了。 给定两个正整数值,return 10...20(含)范围内的较大值,或者 return 0,如果两者都不在该范围内。 max1020(11,19)--> 19

max1020(19,11)--> 19

max1020(11,9)--> 11

你能帮我看看我的解决方案出了什么问题吗:-

public int max1020(int a, int b) {
  if((a>=10&&a<=20)||(b>=10&&b<=20)){
    int max;
    if(a>b){
      max=a;
    }else{
      max=b;
    }
    return max;
  }
  return 0;
}

您没有处理较低数字在 10 到 20 范围内但较高数字超出该范围的情况。在那种情况下,您应该 return 较小的数字,但您 return 较大的数字,这超出了范围。

当你的if((a>=10&&a<=20)||(b>=10&&b<=20))条件为真时,有3种可能:

  1. a 和 b 都在 10 到 20 之间,在这种情况下,您应该 return 较大的
  2. 只有 a 在 10 到 20 之间,在这种情况下你应该 return a(即使 b 更高)
  3. 只有 b 在 10 到 20 之间,在这种情况下你应该 return b(即使 a 更高)

你可以这样写:

public int max1020(int a, int b) {
  if (a >= 10 && a <= 20) {
      if (b >= 10 && b <= 20) {
          return a > b ? a : b;
      } else {
          return a;
      }
   } else {
      if (b >= 10 && b <= 20)) {
          return b;
      } else {
          return 0;
      }
   }
}