我正在尝试创建一个检查数组以增加元素的方法。如果所有元素按升序排列,则应返回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;
}
答案 0 :(得分:4)
因为在包含n
项目的列表中,它们之间只有n-1
个差距。
更改为
for (int i=0; i<arr.length-1; i++)
(另外,您可能需要检查以false
开头并设置为true
是否正确)。
答案 1 :(得分:4)
你有两个问题:
i+1
,我需要比通常的循环更早地完成一次迭代递增。{1, 2, 0}
时,这个数组将通过:1 < 2
,这是真的,所以返回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
}
这种逻辑 - 早期退出,错误的问题和最终的真实回归 - 非常普遍,是一种很好的学习模式。
答案 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;
}
它会有所帮助
答案 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;
}
}