用Java编写Bat Array中等级

时间:2016-10-02 11:48:46

标签: java arrays

返回数组中数字的总和,除了忽略以6开头并延伸到下一个7的数字部分(每6个后跟至少7个)。返回0表示没有数字。

   sum67([1, 2, 2]) → 5
 sum67([1, 2, 2, 6, 99, 99, 7]) → 5
 sum67([1, 1, 6, 7, 2]) → 4

1 个答案:

答案 0 :(得分:0)

我看了你的代码,你应该解决一些问题:

  • 如果有可能在数组结束后6之后不存在7,则应检查i<nums.length

  • 您还应该在i<nums.length之前检查sum = sum+nums[i];,因为7可以是数组中的最后一个元素,而您的索引现在已经超过了数组的最后一个元素。事实上,如果你不进行检查,你的第二个例子就会得到ArrayIndexOutOfBoundsException

  • sum = sum+nums[nums.length-1];没有必要。你怎么知道它应该包含在你的金额中?

修正上述要点后,您的代码应如下所示:

public static int sum67( int[] nums)
{
    int sum = 0;

    if(nums.length==0)
        return 0;
    if(nums.length==1)
        return nums[0];

    int i ;
    for(i=0;i<nums.length;i++)
    {
        if(nums[i]==6)
        {
            i++;
            while(i<nums.length && nums[i]!=7)
            {
                i++;
            }
            i++;
        }

        if(i<nums.length)
        {
            sum = sum+nums[i];
        }
    }
    return sum;
}

然而,它有点乱,可以重构。我认为下面的代码要好得多。

public static int sum67( int[] nums)
{
    int sum = 0;
    boolean add = true;

    for( int i = 0; i < nums.length; i++)
    {
        if( add && nums[i] == 6 || !add && nums[i] == 7)
        {
            add = !add;
            continue;
        }

        if( add)
            sum += nums[i];
    }

    return sum;
}