簡體   English   中英

如果所有參數都在范圍內,則實現返回true的方法

[英]implementing a method that returns true if all argument is in the range

我想實現方法s如:

給定2個int值,如果其中一個值在10..20(含)范圍內,則返回true。

簡單的答案是:

public boolean s(int a, int b) {    
    return (a > 9 && a < 21) ||  (b > 9 && b < 21);
}

但是如何在不重復使用模式(x > 9 && x < 21)且沒有新方法的情況下實現呢? 有一個遞歸的解決方案?

使用varargs嘗試此代碼,並傳遞任意數量的int值進行測試。

實現一個方法,如果任何參數在范圍內,則返回true

根據您的問題-如果其中一個在10..20(含)范圍內,則返回true。

public boolean s(int... a) {
    for (int i : a) {
        if (i > 9 && i < 21) {
            return true;
        }
    }
    return false;
}

- 編輯 -

如果所有參數都在范圍內,則實現返回true的方法

public static boolean s(int... a) {
    for (int i : a) {
        if (i < 10 || i > 20) {
            return false;
        }
    }
    return (a.length > 0);
}

- 編輯 -

如果需要 ,請在該方法的開頭進行檢查,但我絕不建議您使用它。

    if (a.length != 2) {
        throw new IllegalArgumentException("It accepts only two arguments");
    }

- 編輯 -

如果您無法更改可能來自接口或超類的方法簽名,請按照您的要求進行。

public boolean s(int a, int b) {

    int[] array = new int[] { a, b };

    for (int i : array) {
        if (i > 9 && i < 21) {
            return true;
        }
    }
    return false;
}

添加新方法,或保留此“代碼重復”功能。 老實說,這只是一行代碼的一半,實際上並沒有重復。

如果您正在尋找遞歸解決方案,那么我建議這樣做:

public static boolean s(int a, int b) {
    if (b == 0) {
        return (a > 9 && a < 21);
    }
    return (a > 9 && a < 21) || s(b, 0);
}

但是,這比原始解決方案的可讀性差得多。


編輯每個@طاهر,更簡潔的版本

public static boolean s(int a, int b) {
    boolean r = (a > 9 && a < 21); 
    return b == 0 ? r : r || s(b, 0); 
}

您也可以嘗試這樣做,但這不是最佳解決方案:

public static boolean s(int a, int b) {
    int n = a * b;
    if (a == 0)
        n = b;
    if(b == 0)
        n = a;
    for (int i = 10; i < 21; i++)
        if( n % i == 0 )
            return true;
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM