检查如果某个区间中包含的数字不使用“if”或循环

时间:2016-02-17 22:24:18

标签: java

所以,我有一个基本问题。我可以很容易地解决这个问题但是我现在傻眼了,因为我的老师希望我们不使用任何if语句或循环来解决这个问题。所以间隔不是数组。一个基本的例子是[1,6]或(1,6)或者是开放和封闭的混合。所以,5将在区间内。我需要一个包含(双号)方法来检查数字是否在里面。如果没有if或loop,你怎么能这样做呢?我傻了吗?是否有一些我没有偶然发现的神奇方法呢?

我的方法将是

public double contains(number)
{
    if (number >= leftEndPoint && number <= rightEndPoint) //lets assume interval is "closed" heh. on both ends
    return true;

    return false;

}

但是......我们不能使用if语句或循环。

5 个答案:

答案 0 :(得分:5)

请注意, if let image = screenshot as? AnyObject { let activity = UIActivityViewController(activityItems: [image], applicationActivities: nil) self.presentViewController(activity, animated: true, completion: nil) } 语句条件中的表达式的计算结果为iftrue。这意味着您可以直接返回值,而不是显式false。一般来说,

if

可以替换为

if (x)
    return true;
else
    return false;

答案 1 :(得分:2)

您希望返回布尔值true或false。每个条件表达式都返回一个值,您可以在函数中返回该值而不使用if语句:

public boolean contains(double number) {
    return number >= startNum && number <= endNum;
}

如果您 - 当然 - 在某处定义startNumendNum,那该工作完全正常。

答案 2 :(得分:1)

if(x)
    return true;

永远没有意义。至少,它永远不会比if (true) /* something */;if (isOn == true) /**/更有意义。

请写下:

return number >= leftEndPoint && number <= rightEndPoint;

谢谢你。

答案 3 :(得分:0)

这是我的解决方案。非常详细,但应该是可维护的。

public class Interval {
  final int bottom;
  final int top;
  final IntervalEvaluationStrategy strategy;

  public Interval(final int bottom, final int top, final IntervalEvaluationStrategy strategy) {
    this.bottom = bottom;
    this.top = top;
    this.strategy = strategy;
  }

  public boolean check(int value) {
    return strategy.evaluate(value, bottom, top);
  }

  public enum IntervalEvaluationStrategy {
    OPEN {
      @Override
      boolean evaluate(int value, int bottom, int top) {
        return CLOSED.evaluate(value, bottom, top)
            || value == bottom
            || value == top;
      }
    },
    CLOSED {
      @Override
      boolean evaluate(int value, int bottom, int top) {
        return value > bottom
            && value < top;
      }
    };

    abstract boolean evaluate(int value, int bottom, int top);
  }

  public static void main(String[] args) {
    assert checkInterval(5, 5, 10, IntervalEvaluationStrategy.OPEN);
  }

  //helper method with example usage
  public static boolean checkInterval(final int value, final int bottom, final int top, IntervalEvaluationStrategy strategy) {
    final Interval interval = new Interval(bottom, top, strategy);
    return interval.check(value);
  }
}

答案 4 :(得分:-2)

也可以使用条件运算符。 例如: return(number&gt; = leftEndPoint&amp;&amp; number&lt; = rightEndPoint)?true:false;