我有一个方法,它将数组作为参数并返回一个布尔值。
在方法内部,我有一个if / else语句。如果语句为true,我希望结果返回true,如果语句为false,我希望语句返回false。
public static boolean allPositive (double[] arr)
{
for (int i = 0; i < arr.length; i++)
{
if(arr[i] > 0)
{
return true;
}
else
{
return false;
}
}
return //What do i put here?
}
}
当然,最后需要一个返回值。但是,我对我应该在底部返回的内容感到困惑。我该怎么改写这个?
答案 0 :(得分:4)
首先,您的代码是错误的。例如,使用{1, -1, 2}
,您的方法将返回true。
如果你用不同的方式写,你可以避免这个问题:
public static boolean allPositive (double[] arr) {
for (int i = 0; i < arr.length; i++) {
if(arr[i] < 0)
{
return false;
}
}
return true;
}
编辑:甚至更好,使用Java 8和Streams的单行解决方案(我喜欢单行解决方案):
public static boolean allPositive (double[] arr) {
//Stream the array and see if any elements matches condition `<0`.
return !Arrays.stream(arr).anyMatch(i->i<0);
}
如果您需要多行代码才能使用集合,那么您应该了解Streams。
答案 1 :(得分:1)
public static boolean allPositive (double[] arr)
{
boolean b = true;
for (int i = 0; i < arr.length; i++)
{
if(!(arr[i] > 0))
{
b = false;
}
}
return b;
}
Java的工作方式,通过确保所有返回发生在if else语句之外,确保代码没有问题。这是因为,程序员常见的错误是返回if else语句,但从不创建else条件,因此该方法永远不会返回任何内容。这样做是一个很好的做法,所以你以后不要试图找出一个方法不会返回的原因。
答案 2 :(得分:0)
如果将空数组传递给方法,则必须在方法结束时(循环之后)返回应返回的值。您可以自行决定空数组是否为“allPositive”。
答案 3 :(得分:0)
Arnaud的回答有多个回复陈述。代码味道。如果数组为{1,-1,2},则DreadHeadedDeveloper的答案有一个逻辑错误,它返回true。
这个功能/方法很简洁,遵循良好的编码习惯。
public static boolean allPositive (double[] arr) {
boolean ret = true;
for (int i = 0; i < arr.length; i++) {
if(arr[i] <= 0) {
ret = false;
}
}
return ret;
}