![](/img/trans.png)
[英]Writing a method isAbleToFly(), which takes no argument and returns true or false?
[英]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.