java – 查找数组中的数字总和 – 不包括数字13和它后面的数字

前端之家收集整理的这篇文章主要介绍了java – 查找数组中的数字总和 – 不包括数字13和它后面的数字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想用 Java编写一个程序,给定一个数组,找到数组中所有数字的总和 – 有一个例外!由于数字13非常不吉利,我建议我们将完全排除数字13,以及直接在13之后的数字(如果存在的话)从总和中排除.

该程序,我将称之为sum13,应该从以下输入产生以下结果(这些只是几个例子):

sum13([1,2,1])= 6这个是正常的;没有13在这里.

sum13([5,13,​​2])= 5 13和13之后的数字被排除在外.

sum13([13,13])= 0数组只包含13个,因此它们都不包括在内.

sum13([1,1,13])= 4一个稍长的预期输出示例.

这是我为sum13提出的代码

public int sum13(int[] nums) {
  int sum = 0;
  for (int i = 0; i < nums.length; i++) {
    // we start by adding all the non-13s to the sum
    if (nums[i] != 13) sum += nums[i];
  }
  // now we go back and remove all the non-13s directly after a 13
  for (int j = 0; j < nums.length; j++) {
    // the outermost loop checks if the numbers are a 13
    if (nums[j] == 13 && j < nums.length - 1) {
      for (int k = j + 1; k < nums.length; k++) {
        // this loop checks that the number after the 13 is not a 13
        if (nums[k] != 13) {
          sum -= nums[k];
          break;
        }

      }
    }
  }
  return sum;
}

上面的程序有效,虽然看起来确实很混乱!

有没有更好的方法来编写这样一个不包含多个循环和嵌套ifs的程序?

解决方法

好吧,你用i作为迭代器.当当前的数字是13时,只需要我.这样,你不仅不会在总和上加13,而且你也跳过下一个值.
public int sum13(int[] nums) {
  int sum = 0;
  for (int i = 0; i < nums.length; i++) {
    // we start by adding all the non-13s to the sum
    if (nums[i] != 13){
     sum += nums[i];
    }
    else {
     i++;
    }
  }
 return sum;
}

猜你在找的Java相关文章