(Java)检查数组以增加元素
我正在尝试创建一个检查数组以增加元素的方法。 如果所有元素的顺序递增,则应返回True。 当我比较arr [i + 1]时,我得到一个越界exception。 关于如何使其发挥作用的任何想法。
int[] one = {1,2,3,4,5}; public static boolean isIncreasing(int[]arr) { boolean z = false; for(int i=0; i<arr.length;i++) { if(arr[i]<arr[i+1]) { z = true; } } return z; }
我建议你这样写你的方法
public static boolean isIncreasing(int[]arr) { for(int i=1; iarr[i]) return false; } return true; }
我会帮你的
- 返回正确的结果(如果不应该返回true)
- 考虑出界
- 避免不必要的循环
因为在具有n
项目的列表中,它们之间仅存在n-1
间隙。
改成
for (int i=0; i
(另外,您可能想要检查以false
开头并设置为true
是否正确)。
你有两个问题:
- 你的循环是一个迭代太长:因为你正在检查元素
i+1
,我需要比通常的循环更早地完成一次迭代递增。 - 你的逻辑是有缺陷的。 你的循环将在第一次检查为真时终止,所以当测试第一次迭代测试
1 < 2
时,这个数组将通过:{1, 2, 0}
,这是真的,所以返回true - 这不是我们想要的)
解决这两个问题:
int[] one = {1,2,3,4,5}; public static boolean isIncreasing(int[] arr) { for(int i=0 ; i < arr.length - 1; i++) { // finish at length - 1 if (arr[i] > arr[i+1]) { return false; // found elements that are out of order - return false } } return true; // nothing out of order found - return true }
这种逻辑 - 早期退出,错误的问题和最终的真实回报 - 非常普遍,是一种很好的学习模式。
当(i + 1)的值变为array.length时,会得到该exception。 例如,如果你有一个长度为10的数组,元素索引将从0,1,2 …到9.所以要么你必须检查直到i < arr.length - 1
或者你可以相应地修改你的逻辑。
您可以使用Java 8的IntStream。
import java.util.stream.IntStream; public class Test { public static boolean isIncreasing(int[] a) { return IntStream.range(1, a.length).reduce(0, (acc, e) -> acc + (a[e - 1] <= a[e] ? 0 : 1)) == 0; } }