Java考试错误检查

时间:2014-04-09 11:00:45

标签: java

我有上一篇文章中的以下代码:

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语句的行上会出现运行时错误,我仍然不确定如何。由于我无法纠正它,我无法看到我如何得到不良结果。我可以看到这是一个如此直截了当的问题,我错过了一些非常明显的东西,但我已经看了一段时间而且我完全错过了它。

6 个答案:

答案 0 :(得分:1)

该代码中存在多个错误。这里有一个列表,包括影响的解释以及如何解决它们:

  • 您正在使用min初始化0 效果:如果你的阵列是只包含{1.1, 2.2}你的代码会声称0是最小值,显然是错误的,因为没有索引i arr [i] == 0
    修复double min = Double.MAX_VALUE;

  • 您的for循环从索引1 for (int i = 1; ...)开始 效果:您正在跳过arr [0]
    修复for (int i = 0 ...)

  • 由于条件or ( ... ; <= n; ...)
    ,您的循环经常迭代一次 效果:您将遇到AIOOBE(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 ++)。 仅当数组的元素为非负数时才计算最小值。