我有上一篇文章中的以下代码:
int n = arr.length;
double min = 0;
int minLocation=0;
for(int i = 1; i <= n; i++) {
if( arr[i] < min ) {
min = arr[i];
}
minLocation = i;
}
System.out.print("The minimal value is arr[");
System.out.println(minLocation + "] = " + min);
我必须从代码中回答以下问题:
(i) The line on which the error appears
(ii) What effect the error would have
(iii) How the error should be corrected.
You may assume arr[] is a non-empty array of double values that has been
properly declared and initialized.
我知道在if语句的行上会出现运行时错误,我仍然不确定如何。由于我无法纠正它,我无法看到我如何得到不良结果。我可以看到这是一个如此直截了当的问题,我错过了一些非常明显的东西,但我已经看了一段时间而且我完全错过了它。
答案 0 :(得分:1)
该代码中存在多个错误。这里有一个列表,包括影响的解释以及如何解决它们:
min
初始化0
效果:如果你的阵列是只包含{1.1, 2.2}
你的代码会声称0是最小值,显然是错误的,因为没有索引i arr [i] == 0 double min = Double.MAX_VALUE;
for (int i = 1; ...)
开始
效果:您正在跳过arr [0] for (int i = 0 ...)
or ( ... ; <= n; ...)
ArrayIndexOutOfBoundsException
)for ( ... ; i < n; ...)
minLocation
效果:在循环的最后一次迭代之后,minLocation
将始终为= n minLocation = i;
放在 if语句中。更正版本
int n = arr.length;
double min = Double.MAX_VALUE;
int minLocation = 0;
for(int i = 0; i < n; i++) {
if(arr[i] < min) {
min = arr[i];
minLocation = i;
}
}
答案 1 :(得分:1)
我知道if语句的行会有运行时错误 我还不确定如何
此运行时错误为IndexOutOfBoundsException
。发生此错误是因为数组索引比数组大小少一个。
你的循环应该是。
for(int i = 0; i < n; i++)
答案 2 :(得分:1)
你的for循环必须是:
for(int i = 0; i < n; i++)
否则,您将获得IndexOutOfBoundsException
,因为您访问其范围之外的数组。
此外,您应该将您的最小值初始化更改为:
double min = Double.MAX_VALUE;
否则,如果您的数组仅包含负值,则只会找到最小值。
答案 3 :(得分:1)
你打算让你的for()循环从索引1开始吗?按惯例,它从0开始;
它应该是:for(int i = 0; i
答案 4 :(得分:1)
如果要找到给定数组的最小值和位置,程序中就会出现逻辑错误。
初始化
double min = arr [0];
以
结束循环我&lt; Ñ
包含
minLocation = i;
作为
if( arr[i] < min )
{
min = arr[i];
minLocation = i;
}
答案 5 :(得分:0)
Java数组索引从0开始。因此for循环应该是for(int i = 0; i&lt; n; i ++)。 仅当数组的元素为非负数时才计算最小值。