我想用
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; }