2016-02-17 61 views
4

因此,我有一個基本問題。我可以很容易地解決這個問題,但我現在傻眼了,因爲我的老師希望我們解決這個問題,而不是使用if語句或循環。所以間隔不是一個數組。一個基本的例子是[1,6]或(1,6)或開放和封閉混合。所以,5將在間隔。我需要一個包含(雙數)方法來檢查數字是否在裏面。如果沒有if或loop,你怎麼可能做到這一點?我是愚蠢的嗎?是否有一種神奇的方法,我沒有偶然發現呢?檢查是否在不使用「if」或循環的情況下包含一個數字

我的做法是沿着

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

    return false; 

} 

線條的東西,但是......我們不能if語句或循環使用。

+1

「讓我們假設間隔打開」其實你的例子是一個封閉的間隔。 –

+0

heh oops:D @ Code-Apprentice – CabDude

回答

5

請注意,條件爲if聲明的表達式評估爲truefalse。這意味着您可以直接返回值,而不是明確地使用if。在一般情況下,

if (x) 
    return true; 
else 
    return false; 

可以通過

return x; 
1
if(x) 
    return true; 

從來沒有道理。至少,它永遠不會比if (true) /* something */;if (isOn == true) /**/更有意義。

請寫:

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

謝謝。

+0

好的,但假設間隔是開放的。如果它關閉,它只能解決它。 – CabDude

+0

@CalebBishop請你從這裏弄清楚,謝謝 – djechlin

+0

@CalebBishop在Java代碼中,開放和關閉區間有什麼區別? –

2

更換要返回true或false的布爾值。每一個條件表達式返回這樣一個值,你可以在你的函數返回,而不必if語句:

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

也就是說,如果你工作完全沒有 - 當然 - 定義startNumendNum地方。

-2

也可以使用條件運算符。 例如: return(number> = leftEndPoint & & number < = rightEndPoint)?true:false;

+0

你的'條件運算符'實際上是一個'三元運算符',使用它是矯枉過正的。 –

+0

由於條件的值已經是「真」或「假」,爲什麼浪費時間與額外的打字? –

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); 
    } 
} 
相關問題