gpt4 book ai didi

java - 求 int 数组的总和 - 忽略 6 和 7 之间的所有数字(含 6 和 7)

转载 作者:行者123 更新时间:2023-12-01 19:51:51 25 4
gpt4 key购买 nike

我想编写一个程序,将整数数组中的所有数字相加 - 但有一个异常(exception)!由于数字 6 不是最好的数字,我建议排除所有以 6 开头并以 7 结尾的数字部分(包括在内)。 每个 6 后面总是跟着一个 7,但反之则不一定。

以下是输入数组及其预期输出的一些示例:

sum67([1, 2, 2, 6, 99, 99, 7]) = 5 排除 6 和 7 之间的所有数字。

sum67([1, 2, 2]) = 5 这里没有 6 或 7。

sum67([1, 1, 6, 7, 2]) → 4 不包括 6 或 7。

以上测试全部通过。

再说一次,方法头是固定的,我可能只改变方法体。这是我对代码的尝试:

public int sum67(int[] nums) {
int sum = 0;
for (int i = 0; i < nums.length; i++) {
// Adding all numbers that are not a 6
if (nums[i] != 6) sum += nums[i];
}
for (int j = 0; j < nums.length; j++) {
// check for the sixes - the lower bound exclusive
if (nums[j] == 6) {
for (int k = j + 1; k < nums.length; k++) {
// check for the sevens - the upper bound inclusive
if (nums[k] == 7) {
// take away all the numbers between the 2 bounds, including the 7
for (int m = j + 1; m <= k; m++) {
sum -= nums[m];
}
}
}
}
}
return sum;
}

上面的程序不仅不起作用,而且显然非常困惑。特别是,它未通过以下测试:

sum67([1, 6, 2, 6, 2, 7, 1, 6, 99, 99, 7]) = 2 实际输出为 -463 !

sum67([2, 2, 6, 7, 7]) = 11 实际输出为 -3

本质上是:

我的代码中的错误行在哪里?

有没有更好的方法来编写这个没有那么多循环和嵌套 if 的程序?

最佳答案

public int sum67(int[] arr) {
int sum = 0;
boolean isIn67 = false;
for (int i = 0 ; i < arr.length ; i++) {
if (arr[i] == 6) {
isIn67 = true;
continue;
} else if (arr[i] == 7 && isIn67) {
isIn67 = false;
continue;
}
if (!isIn67) {
sum += arr[i];
}
}
return sum;
}

以上是我的尝试。说明:

  • 只需要一个循环就可以遍历所有元素。在每次迭代中,一些 if 语句用于确定是否应将该元素添加到总和中。
  • 有一个名为 isIn67 的变量,用于指示 arr[i] 是否在 6-7 范围内,因此不应添加到总和中
  • 当遇到 6 时,我们将 isIn67 设置为 true。
  • 当我们遇到 7 isIn67 为 true 时,我们将 isIn67 设置为 false。
  • 使用
  • 继续是为了我们不计算那些7
  • 最后,如果我们不是 in67,我们会将元素添加到总和中。

您的代码的问题可能是您嵌套太多。用于减去不需要的数字的行嵌套在外部循环中,因此它可能会比预期执行更多次,从而导致结果为负。

关于java - 求 int 数组的总和 - 忽略 6 和 7 之间的所有数字(含 6 和 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51113165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com