方法类型的方法参数(int[]nums)

gj3fmq9x  于 2021-08-25  发布在  Java
关注(0)|答案(4)|浏览(947)

我正在编写一个代码,将数组中的数字相加并求和。但是,如果数字为13,则跳过该数字及其后的数字。我拿不到我的护照 main() 方法将参数输入到我为执行此任务而创建的方法中。
我目前使用的语法是:

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

public static void main(String[] args) {
     System.out.println(sum13([1, 2, 2, 1]));
     System.out.println(sum13([13, 1, 2, 13, 3, 3]));
}

}

System.out.println 行,我收到了错误信息,

The method sum13(int[]) in the type A3 is not applicable for the arguments (int, int, int, int)

有人知道如何解决这个错误吗?

whlutmcx

whlutmcx1#

选项:
1-创建一个数组,因为该方法需要一个数组

sum13(new int[] { 1, 2, 2, 1};
// or
int[] array = { 1, 2, 2, 1}; // short for int[] array = new int[] { 1, 2, 2, 1};
sum13(array);

2-使用 varargs 参数(可变arity参数)如:

public static int sum13(int... nums) {  // creates: int[] nums

致电:

sum13(1, 2, 2, 1)

在本例中,java将创建数组并将其作为 int[] nums .
这个 ... 可以与任何类型一起使用,但必须是方法声明中指定的最后一个参数。编译器将生成该方法,就像传递了一个数组一样——因此它在方法内部用作指定类型的数组;当调用该方法时,将创建数组本身。或者,可以指定一个数组而不是值。
尽管不是(直接)问题,但请注意 nums[i]-- == 13 没有做可能是有意的事。后缀减量表达式 X-- 哪里 X 是一个变量(或表示变量的表达式),将递减该变量并在递减之前返回其值。所以 nums[i]-- 将返回的值 nums[i] 并递减索引中存储的值 i . 可能是有意的 nums[i-1] == 13 ,但当 i == 0 (除非未评估)。

unguejic

unguejic2#

您可以使用一个简单的 if - else 如果数字为13,则跳过该数字及其旁边的数字:

public static 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;
}

这里,如果数字是13,你只需要增加 i 如果当前迭代中的数字是13,它将不会添加到 sum 因为 sumelse 此外,它不会将数字添加到它旁边,因为您会增加 i 按1,循环结束时 i 再次递增,这意味着 i 将有效地递增两次,如果当前数字为13,则跳过13旁边的数字。
此外,我还使用了其他答案中提到的可变长度参数,允许您将任意数量的参数传递给 sum13 因此你这样称呼它:

public static void main(String[] args) {
     System.out.println(sum13(1, 2, 2, 1));
     System.out.println(sum13(13, 1, 2, 13, 3, 3));
}
pexxcrt2

pexxcrt23#

这个问题的结构很好!这个问题的原因是 main 方法不适用于 sum13 方法。关于数组的理解有点错误。正确的解决办法是

System.out.println(sum13(new int[]{1,2,3,4}));
u91tlkcl

u91tlkcl4#

代码中的一些错误是-
for循环中的return语句。
错误地声明数组并将其传递给sum13方法。 nums[i]-- == 13 不是查找第i-1个元素的正确方法,在查找i-1元素时,请检查它是否低于零,否则您将面临arrayindexoutofbounds异常。

public static int sum13(int[] nums) {
 int sum = 0;
 for (int i = 0; i < nums.length; i++) {
      if (nums[i] == 13 || ( i > 0 && nums[i-1] == 13)) {
           continue;
      }
      sum += nums[i];
  }
 return sum;
}
public static void main(String[] args) {

  int[] array1 = {1, 2, 2, 1};
  int[] array2 = {13, 1, 2, 13, 3, 3,13,5,13,2,13,1,1,1};
  System.out.println(sum13(array1));
  System.out.println(sum13(array2));
}

相关问题