我正在编写一个简单的程序,如果对数组进行排序则返回 true 否则返回 false 并且我一直在 eclipse 中遇到异常,我只是想不通为什么。我想知道是否有人可以看一下我的代码并解释一下为什么我会遇到数组越界异常。
public static boolean isSorted(int[] a)
{
int i;
for(i = 0; i < a.length; i ++);{
if (a[i] < a[i+1]) {
return true;
} else {
return false;
}
}
}
public static void main(String[] args)
{
int ar[] = {3,5,6,7};
System.out.println(isSorted(ar));
}
原文由 user2101463 发布,翻译遵循 CC BY-SA 4.0 许可协议
让我们看一下您构建的循环的更简洁版本:
我应该首先指出原始循环中的语法错误。即,在开始循环体的花括号 (
{
;
)。应该删除该分号。另请注意,我重新格式化了代码的空白区域以使其更具可读性。现在让我们讨论在循环中发生了什么。循环迭代器 --- 从
i
开始,到0
a.length - 1
。由于i
用作数组的索引,因此指出a[0]
是第一个元素并且a[a.length - 1]
你的数组的最后一个元素是有意义的但是,在循环体中,您还编写了i + 1
的索引。这意味着如果i
等于a.length - 1
,您的索引等于a.length
,它在数组的边界之外。函数
isSorted
也有相当大的问题,因为它第一次返回 truea[i] < a[i+1]
而 false 第一次不是;因此,它实际上并不检查数组是否已排序!相反,它只检查前两个条目是否已排序。具有类似逻辑但检查数组是否真的排序的函数是