2016-10-02 61 views
-2

返回数组中的数字总和,除了忽略以6开头并延伸到下一个7(每6个后面至少有一个7)的数字部分。没有号码返回0。Java中的编码蝙蝠阵列中等级

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

请先试试看。如果您遇到麻烦,请告诉我们您尝试了什么,我们会为您提供帮助。 – uoyilmaz

+3

您的问题在某些入门级课程中看起来像是作业。帮你个忙,自己解决。 StackOverflow的目的是为了解决现实生活中的问题,而不是帮助完成作业。 (我没有投票给你,但这可能是其他人做的原因)。 – auval

+0

public int sum67(int [] nums)int sum = 0; if(nums.length == 0) return 0; if(nums.length == 1) return nums [0]; int i;对于(i = 0; i

回答

0

我看着你的代码,并有一些事情你应该修正:

  • 你应该检查i<nums.length如果有一个可能性,即不会有之后的7直到数组结束。

  • 您还应该在sum = sum+nums[i];之前检查i<nums.length,因为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; 
}