如何解决isSorted方法不适用于所有情况……不确定为什么
|| 这是问题的基本形式: 编写一个名为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比较的结果,因为在检测到乱序情况时不会退出。
,如果为假,则必须中断或返回。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。