Java中最长运行错误的长度

时间:2015-06-30 15:51:51

标签: java

我需要编写一个返回数组中运行时间最长的程序。程序运行正常,直到给出一个空参数。它产生一个0,但显示出一个Out of Bounds Error。我该如何解决这个问题?

这是我目前的代码:

public class Numbers{
 /**Computes the length of the longest run (sequence of 
  adjacent repeated values) in an array.
  @param values an array of integer values
  @return the length of the longest run in values
   */
public int lengthOfLongestRun(int[] values){
int lastVal = values[0];
int currentLength = 1;
int longestLength = 1;

for (int i = 1; i < values.length; i++)
{
    if (values[i] == lastVal)
{
    currentLength++;
}

else
    {currentLength = 1;}

   lastVal = values[i];

    if (currentLength > longestLength)
   { longestLength = currentLength; }
}
    return longestLength;

   }
}

错误: java.lang.ArrayIndexOutOfBoundsException

5 个答案:

答案 0 :(得分:1)

代码的第一行:

int lastVal = values[0];

假设数组中至少有一个值。

所以添加防守线:

        if (values.length==0){
            return 0;
        }

答案 1 :(得分:1)

当数组为空时,该行将产生异常:

int lastVal = values[0];

在执行任何其他操作之前,您需要添加一个检查以查看数组是否为非空:

public int lengthOfLongestRun(int[] values) {
    if (values == null || values.length == 0) {
        return 0;
    }
    // The rest of your method goes here
    ...
}

通常,最好在方法顶部以参数检查的形式说明方法对其参数内容的假设。例如,如果您知道在传递null或空集合时方法不起作用,请在顶部添加一个检查以立即返回或根据需要抛出异常。

注意:您应该修复代码中的else以包括重置长度和最后一个值,如下所示:

...
else {
    currentLength = 1;
    lastVal = values[i];
}

答案 2 :(得分:1)

您的错误就在这一行:

lastVal = values[i];

我的初始值为1,当给出空参数时,值为空数组。

答案 3 :(得分:0)

获取数组中数字的最大序列:

public int maxSequence(int[] A, int number) {

    int counter = 0, maxCounter = 0;

    for (int i = 0; i < A.length; i++)

        if (A[i] == number)
            maxCounter = ++counter > maxCounter ? counter : maxCounter;
        else
            counter = 0;

    return maxCounter;
}

答案 4 :(得分:0)

最好在开始处理之前对emptynull进行检查并对其采取适当的措施。

在你的情况下是array,请参考以下代码:

  /**
     * Computes the length of the longest run (sequence of adjacent repeated
     * values) in an array.
     * 
     * @param values
     *            an array of integer values
     * @return the length of the longest run in values
     */
    public int lengthOfLongestRun(int[] values) {
        int longestLength = 1;
        if (values != null && values.length > 0) {
            int lastVal = values[0];
            int currentLength = 1;
            for (int i = 1; i < values.length; i++) {
                if (values[i] == lastVal) {
                    currentLength++;
                } else {
                    currentLength = 1;
                }
                lastVal = values[i];

                if (currentLength > longestLength) {
                    longestLength = currentLength;
                }
            }
        } else {
            // take some action either return some default value or throw some
            // exception
        }
        return longestLength;
    }