【问题标题】:Method Paramaters for Method type (int[] nums)方法类型的方法参数 (int[] nums)
【发布时间】:2021-09-16 18:46:29
【问题描述】:

我正在编写一个将数组中的数字相加并求和的代码。但是,如果一个数字是 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)

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

【问题讨论】:

  • [1,2,3] 不是您创建整数数组的方式。纠正一下,你会没事的
  • 你为什么不使用可变参数呢? sum13(int... nums) 然后sum13(1,2,3,4) 等等。
  • 还要想想nums[i]-- == 13 是什么意思。我假设您想跳过“13 之后的数字”......但是nums[i]-- 是否代表下一个数字? (提示:取表达式 appart,即你可以这样写:int x = nums[i]; x--; if(x ==13) ... - x 指的是什么数字?)
  • 您当前的语法错误。你猜到那个语法了吗?我不认为 stackoverflow 是学习 Java 语法的地方。您是否尝试在 Internet 上搜索 java int 数组初始化

标签: java arrays loops sum parameter-passing


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    选项:

    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 参数(可变参数),如:

    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 时会导致异常(除非未评估)。

    【讨论】:

      【解决方案3】:

      您的代码中的一些错误是-

      1. for 循环内的返回语句。

      2. 错误地声明数组并将其传递给 sum13 方法。

      3. 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));
        }
        

      【讨论】:

        【解决方案4】:

        如果是13和旁边的数字,可以使用简单的if-else跳过数字:

        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 增加 1。如果当前迭代的数字是 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));
        }
        

        【讨论】:

          【解决方案5】:

          我们可以像下面这样创建数组和赋值。

          import java.util.*;
          class Example{
          public static void main(String args[]){
              //--------Method 1-----------------
              int[] a=new int[5];
              int[] b;
              b=new int[5];
              //int[] x=new int[]; //Illegal -->size
              
              //--------Method 2-----------------
              int[] c={10,20,30,40,50};
              int[] d;
              //d={10,20,30,40,50}; //Illegal
                      
              //--------Method 3-----------------
              int[] e=new int[]{10,20,30,40,50};
              int[] f;
              f=new int[]{10,20,30,40,50}; //Legal
              
              int[] g=new int[5]{10,20,30,40,50}; //Ilelgal-->size
              }
          }
          

          所以,在您的代码中(在主方法中将数组元素作为参数传递)应该像这样正确。System.out.println(sum13(new int[]{1, 2, 2, 1})); System.out.println(sum13(new int[]{13, 1, 2, 13, 3, 3}));

          其他是 nums[i]-- 错误。如果我们想要获取 i-1 元素,我们应该编码为 nums[i-1]。所以,整个代码如下。

          import java.util.*;
          class Demo{
          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) {
          
              System.out.println(sum13(new int[]{1, 2, 2, 1}));
              System.out.println(sum13(new int[]{13, 1, 2, 13, 3, 3}));
             }
          
          }
          

          【讨论】:

            猜你喜欢
            • 2018-12-16
            • 1970-01-01
            • 1970-01-01
            • 2018-12-20
            • 1970-01-01
            • 2017-09-06
            • 1970-01-01
            • 1970-01-01
            • 2017-12-18
            相关资源
            最近更新 更多