java - 为什么在这个算法中执行 IF 语句没有错误?
问题描述
我在重复一些以前通过的 Java 主题,并对算法究竟是如何工作的感到好奇?该算法在整数数组中找到最大数并返回其索引。
public static int findIndexOfMax(int[] numbers) {
int index = 0;
for (int i = 1; i < numbers.length; i++) { //i = 0 doesn't seem to change anything
if (numbers[i] > numbers[index]) { //numbers[1] doesn't exist and still no errors
index = i;
}
}
return index;
}
public static void main(String[] args) {
System.out.println(findIndexOfMax(new int[] {99})); //passing an array with a single element
}
听起来很愚蠢,但是如果我将具有单个元素的数组传递给方法,为什么 IF 语句中没有发生错误?在那里,我们将不存在的 numbers[1] 与另一个 int 进行比较(因为第一次迭代是针对 i=1),但我们没有得到 ArrayIndexOutOfBounds 异常。它的原因是什么?
解决方案
如果您传递一个包含单个元素的数组,则循环的主体将永远不会执行。i
初始化为1
,因此条件i < numbers.length
始终为false
。
循环的主体被跳过,并返回一个index
of 0
。
推荐阅读
- java - 我的 javafx 程序中有一个空指针异常。我是否正确阅读文本?
- python - 如何使用 Python 修改 Discord webhook 的通道
- canvas - 有没有办法让画布上的文本只用 CSS 属性就不会模糊?
- cucumber - 不可转换的类型;无法将“io.cucumber.java.Scenario”转换为“cucumber.runtime.ScenarioImpl”
- node.js - 测试完成后无法登录。您是否忘记在测试中等待异步内容?
- c# - .NET 4.8 没有为 Linux 创建自包含文件
- reactjs - 如何使用 React Hooks 渲染不同的组件
- sql-server - SQL Server 需要时间来执行查询,但 CPU、Read、Write 都很低
- python - TypeError:字符串索引在python中必须是整数
- c# - 如何将 ASP.NET Framework 配置迁移到 ASP.NET Core?