(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是否正确)。

你有两个问题:

  1. 你的循环是一个迭代太长:因为你正在检查元素i+1 ,我需要比通常的循环更早地完成一次迭代递增。
  2. 你的逻辑是有缺陷的。 你的循环将在第一次检查为真终止,所以当测试第一次迭代测试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; } }