返回数组中数字的总和,返回0表示空数组。除了数字13是非常不吉利的

时间:2016-12-18 09:05:16

标签: java arrays

我正在研究练习编码问题,我遇到了这个任务。

返回数组中数字的总和,为空数组返回0。除了数字13是非常不吉利的。所以它不计算在13之后立即出现的数字也不计算

我提出了正确的解决方案,但我不确定一件事。

public int sum13(int[] nums) 
{
    int sum = 0;
    for(int i = 0; i < nums.length; i++)
    {
        if(nums[i] == 13)
            i++;
        else
            sum += nums[i];
    }
    return sum;
}

在其中一个测试用例中,输出为4,sum13([1,2,13,2,1,13])→4。

我的问题是,在我的“if”语句中,我将计数器递增1.为什么它没有将下一个元素添加到总和中?为什么它跳过下一个元素,即使我只增加1?

3 个答案:

答案 0 :(得分:2)

你的问题在这里:

if(nums[i] == 13)
  i++;

增加指数没有意义;只是让你在一次迭代中增加你的循环计数器两次

所以,请继续

if(nums[i] != 13) {
  sum += nums[i];
}

相反(没有其他的;并且:更好总是使用{braces};即使它只是一个单行!)

因为你实际上根本不需要那个索引,你可以使用for-each循环样式:

for (int num : nums ) {
  if (num != ...

搞乱指数的可能性更小!

答案 1 :(得分:1)

您正在跳过13和之后的数字。您正在递增i两次。

答案 2 :(得分:0)

此代码可以正常工作:-

public int sum13(int[] nums) {
  int sum=0;
  for(int i=0;i<=nums.length-1;i++){
    if(nums[i]!=13){
      sum+=nums[i];
      if(i>0 && nums[i-1] == 13)
        sum -= nums[i];

    }
  }
  return sum;
}