(Java)检查数组以增加元素

时间:2011-08-22 04:17:04

标签: java arrays

我正在尝试创建一个检查数组以增加元素的方法。如果所有元素按升序排列,则应返回True。当我比较arr [i + 1]时,我得到一个越界异常。关于如何使其发挥作用的任何想法。

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;
}

5 个答案:

答案 0 :(得分:4)

因为在包含n项目的列表中,它们之间只有n-1个差距。

更改为

for (int i=0; i<arr.length-1; i++)

(另外,您可能需要检查以false开头并设置为true是否正确)。

答案 1 :(得分:4)

你有两个问题:

  1. 你的循环是一个迭代太长了:因为你正在检查元素i+1,我需要比通常的循环更早地完成一次迭代递增。
  2. 你的逻辑是有缺陷的。你的循环将终止第一次检查为真,所以当测试第一次迭代测试{1, 2, 0}时,这个数组将通过:1 < 2,这是真的,所以返回true - 这个不是我们想要的)
  3. 解决这两个问题:

    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
    }
    

    这种逻辑 - 早期退出,错误的问题和最终的真实回归 - 非常普遍,是一种很好的学习模式。

答案 2 :(得分:2)

我建议你像这样编写你的方法

public static boolean isIncreasing(int[]arr)
{
    for(int i=1; i<arr.length;i++)
    {
        if(arr[i-1]>arr[i])
            return false;
    }
    return true;
 }

它会有所帮助

  • 返回正确的结果(如果不应该返回true)
  • 考虑越界
  • 避免不必要的循环

答案 3 :(得分:1)

当(i + 1)的值变为array.length时,会得到该异常。例如,如果你有一个长度为10的数组,那么元素索引将从0,1,2 ...到9.所以要么你必须检查直到i < arr.length - 1,或者你可以相应地修改你的逻辑。

答案 4 :(得分: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;
  }
}