我的问题有两个方面。
我有一个数组:
double [] temperature = {60.9, 62.6, 67.4, 71.5, 77.1, 81.2, 82.4, 82.5, 81.1, 75.3, 68.8, 63.0};
当我尝试使用以下方法将这些华氏温度值转换为摄氏度或开氏温度时:
for(int index = 0; index <= temperature.length; index++) {
temperature[index] = temperature[index] * tempConverter;
averageTemp += temperature[index];
}
我在temperature[index = temperature[index] * tempConverter;
上得到了ArrayIndexOutOfBoundsException
答案 0 :(得分:1)
将for循环更改为使用<
而不是<=
:
for(int index = 0; index < temperature.length; index++)
考虑一个包含一个元素的数组。这将使array.length
等于1
,如果您使用<=
,则将同时检查array[0]
和array[1]
...但是您知道只有一个元素。这就是为什么您改用<
的原因。
答案 1 :(得分:0)
长度为 n 的数组开始于索引 0 ,其最后一个索引为 n-1 。
此刻,您的循环将从 0 变为 n (包括<= n
),这将使其在保留空间之外时超出保留空间到达索引 n 。相反,您需要从 0 转到 n 排他性(< n
),如下所示:
for(int index = 0; index < temperature.length; index++) {
...
}
考虑长度为3的数组,其中元素表示自己的索引:
a = [0, 1, 2]
尝试访问索引=数组长度(3)的元素将不起作用,因为数组的索引3处没有元素。