-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
返回数组中的数字总和,除了忽略以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
我看着你的代码,并有一些事情你应该修正:
你应该检查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;
}
请先试试看。如果您遇到麻烦,请告诉我们您尝试了什么,我们会为您提供帮助。 – uoyilmaz
您的问题在某些入门级课程中看起来像是作业。帮你个忙,自己解决。 StackOverflow的目的是为了解决现实生活中的问题,而不是帮助完成作业。 (我没有投票给你,但这可能是其他人做的原因)。 – auval
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