【问题标题】:java function returns multiple variables - calljava函数返回多个变量-调用
【发布时间】:2018-11-16 20:14:20
【问题描述】:
public static void delete(char[] qa, int[] aa, int[] bb) {
    if(front == -1 || front > rear) {
        System.out.println("Queue Underflow ");
        return;
    } else {
        //printf("Element deleted from queue is : %c\n", queue_array[front]);
        qa[0] = queueArray[front]; //to stoixeio pou deleted
        aa[0] = queueArray2[front2]; // x syntetagmenh del elem
        bb[0] = queueArray3[front3]; // y coordinate of del elem
        // *timegg=timeg;
        front = front + 1;
        front2 = front2 + 1;
        front3 = front3 + 1;

    }
}

我创建了上述函数,因为我希望它返回这 3 个值,qa、aa、bb。当我尝试将其称为delete(qa, aa, bb); 时,我得到:

method delete cannot applied to given types
required char[], int[], int[]
found char, int, int
reason actual and formal argument lists differ in lenght

调用这个函数的正确和适当的方法是什么?我认为我写的是对的,因为 java 中的所有内容都是参考。 我是 java 新手,所以也许我的概念完全错误。

【问题讨论】:

  • 注意,charint 变量在 Java 中不是引用。
  • 我什至尝试过字符和整数。还是错了?
  • 来源不匹配错误:char[], int[], int[], int[]。你的有 3 个 args 而不是 4 个,所以它似乎会选择不同的 delete...
  • 创建一个类 Result - 使用 1 个 char 和 2 个 int 作为属性,创建 get/set,当您从队列/数组中获取值时,创建“Result”的新实例的实例那些值并返回那个实例,你在 fn 签名中的返回类型应该是“结果”——它有很多问题,我不知道从哪里开始......但我上面所说的至少应该使代码工作并且允许您通过 Result 类传递/访问 3 个变量 - 忘记代码,只需输入正确的 req。我们将为它提供更合理的代码。

标签: java function reference call


【解决方案1】:

该函数需要 3 个数组作为参数。您正在使用 3 个原始值调用该函数。因此,错误消息表明参数的实际类型与预期的不匹配。

如果您有 3 个数组以与以下类似的方式声明(其中“a”、“b”、“c”、1、2、3 替换为您的实际值):

char qa[] = { 'a', 'b', 'c' };
int aa[] = {1, 2, 3};
int bb[] = {1, 2, 3};

那么你的方法调用就会起作用:

delete(qa, aa, bb);

请注意,您在帖子中包含的错误消息与提供的代码不匹配,因为错误消息显示预期需要 4 个参数,而提供的代码具有需要 3 个参数的函数。

【讨论】:

    【解决方案2】:

    您传递的是 char 和 int,而不是传递 char[ ] 和 int[ ]。

    这会起作用。

    char qa[] = new char[20];
    int aa[] = new int[20];
    int bb[] = new int[20];
    
    delete(qa,aa,bb);
    

    【讨论】:

      【解决方案3】:

      为什么不只返回一个包含 3 个值的数组?当您只设置第一个参数时,我只是看不到传入 3 个数组的意义。

      public static int[] delete()
      {
         int[] arr = new int[3];
      
         <do whatever you want to arr>
      
         return arr;
      }
      

      这是在 java 中允许的操作,因为它是内存管理的。

      编辑:

      如果您需要在 Java 中返回泛型类型:

      public static ArrayList delete()
      {
          ArrayList ret = new ArrayList();
          ret.Add('c');  //qa
          ret.Add(0);    //aa
          ret.Add(0);    //bb
          return ret;    
      }
      

      【讨论】:

      • 我也尝试过,但后来我不得不将对象转换为字符,并且其他问题导致程序的其余部分
      • 啊,你可以使用 ArrayList 那么如果你需要泛型类型呢?
      猜你喜欢
      • 2012-04-30
      • 2015-08-16
      • 1970-01-01
      • 2015-12-08
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多