以下是问题的基本形式:
编写一个名为isSorted的方法,该方法接受一个双精度数组作为参数,如果它们被排序则返回true,否则返回false。
这是我的代码:
public static boolean isSorted(double[] a){
if (a.length == 1){
return true;
}
boolean apples = false;
int i = 1;
while (i <= a.length-1){
if (a[i] > a[i-1]){
apples = true;
} else {
apples = false;
}
i++;
}
return apples;
}
当传递双数组{16.1,12.3,22.2,14.4},{1.5,4.3,7.0,19.5,25.1,46.2}或{42.0}时,它分别返回false,true,true。但是,当传递一个数组{1.5,4.3,7.0,19.5,7.8,25.1,46.2}时,它应返回false,返回false。
答案 0 :(得分:4)
a[i] > a[i-1]
(=> apples = true
)的后续案例会覆盖apples
被设置为false的情况。在找到a[i]
不小于a[i+1]
的单个案例后,无需继续进行迭代。
for
循环比使用while
循环更清晰的用例。a[i] === a[i-1]
的情况。此方法执行以上所有操作:
public static boolean isSorted(double[] a){
if (a.length < 2) return true;
for (int i=1; i < a.length; i++) {
if (a[i] < a[i-1]){
return false;
}
}
return true;
}
编辑: 哦,为什么要命名返回变量apples
?它在方法的上下文中没有任何意义,并暗示了草率的编码。
答案 1 :(得分:2)
在apples = false;
中分配else
后,无需进一步迭代。只需将break
放入else
。
答案 2 :(得分:1)
几乎不错,我建议添加break:
if (a[i] > a[i-1]){
apples = true;
} else {
apples = false;
break; // <--
}
答案 3 :(得分:0)
您的方法返回最后比较的结果,因为您在检测到无序条件时不会退出。
答案 4 :(得分:0)
如果错误,你必须打破或返回。