问题描述
||
这是问题的基本形式:
编写一个名为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时返回true。
解决方法
后来的
a[i] > a[i-1]
(=> apples = true
)情况是apples
的覆盖情况被设置为false。找到a[i]
不小于a[i+1]
的单个情况后,就无需继续迭代。
其他清理
这是一个用例,其中for
循环比while
循环更干净。
您应该处理空数组。
假设数组可能包含重复的元素,则需要(正确)处理“ 8”的情况。
此方法完成以上所有操作:
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
?在该方法的上下文中没有任何意义,并暗示草率的编码。
,在else
中分配apples = false;
之后,无需进一步迭代。只需将break
放在else
中即可。
,差不多好了,我建议加个break:
if (a[i] > a[i-1]){
apples = true;
} else {
apples = false;
break; // <--
}
,您的方法将返回LAST比较的结果,因为在检测到乱序情况时不会退出。
,如果为假,则必须中断或返回。