【问题标题】:How to pass part of an array as function argument in java?如何在java中将数组的一部分作为函数参数传递?
【发布时间】:2014-08-01 21:10:09
【问题描述】:
#include<stdio.h>
void fun(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)       
        printf("%d ",a[i]); 
}

int main()
{
    int arr[]={1,2,3,4,5,6};
    fun(arr+2,3);       
    return 0;
}

输出:3 4 5 从第 3 个元素开始的数组已在此处传递给 C 中的 fun()。 鉴于JAVA中没有这样的指针,如何在JAVA中做同样的事情?

为了回应下面的一条评论,我想添加我实际尝试做的事情的详细信息,因为评论部分太长了。我只需要递归访问数组的一个小节。实际上,我正在尝试使用以下算法通过比较两个数组的中位数来查找“两个排序数组的中位数”: 1) 计算输入数组 ar1[] 的中位数 m1 和 m2 和 ar2[] 分别。 2)如果m1和m2都相等,那么我们就完成了。 返回 m1(或 m2) 3) 如果 m1 大于 m2,则中位数存在于一个 以下两个子数组。 a) 从 ar1 的第一个元素到 m1 (ar1[0...|n/2|]) b) 从 m2 到 ar2 的最后一个元素 (ar2[|n/2|...n-1]) 4) 如果 m2 大于 m1,则中位数存在于一个
以下两个子数组。 a) 从 m1 到 ar1 的最后一个元素 (ar1[|n/2|...n-1]) b) 从 ar2 的第一个元素到 m2 (ar2[0...|n/2|]) 5)重复上述过程,直到两个子数组的大小 变为 2。 6) 如果两个数组的大小为 2,则使用下面的公式得到 中位数。 中位数 = (max(ar1[0], ar2[0]) + min(ar1[1], ar2[1]))/2

【问题讨论】:

  • 你不能,真的。不过,您可以让 fun 接受 offset 参数。
  • 您打算更改原始数组的一部分还是制作一个全新的数组?
  • @Cyber​​neticTwerkGuruOrc 我只需要递归访问数组的一个小节。实际上,我试图使用以下算法找到“通过比较两个数组的中位数来查找两个排序数组的中位数”:
  • @Cyber​​neticTwerkGuruOrc 请检查已编辑的问题,因为这里写得太长了。

标签: java arrays function argument-passing


【解决方案1】:

如果您不会修改数组,您可以使用Arrays.copyOfRange(int\[\] original, int from, int to) 创建一个范围的副本:

import java.util.Arrays;
...
public static void main(String args[])
{
    int arr[] = { 1, 2, 3, 4, 5, 6 };
    fun(Arrays.copyOfRange(arr, 2, arr.length), 3);
}

public static void fun(int a[], int n)
{
    for (int i = 0; i < n; i++) {
        System.out.printf("%d ", a[i]);
    }
}

【讨论】:

  • 应该为这个“Arrays.copyOfRange(arr, 2, arr.length)”函数导入哪个包?
  • 我使用了“import java.util.*;”,但显示“找不到符号方法 copyOfRange(int[],int,int)
  • @user3126841 我建议您使用具有自动导入功能的 IDE。但是可以通过导入import java.util.Arrays;来使用
【解决方案2】:

因为指针可能会在您的程序中导致一些严重的错误或安全问题,java 不允许您像在 C 中那样手动操作指针。据我所知,您必须复制它。您可以使用 java 提供的 Arrays 类中的方法,也可以编写自己的代码来执行此操作。

【讨论】:

    【解决方案3】:

    最简单的方法是将开始和结束索引传递给 fun 方法。

    public static void main(String args[])
    {
        int arr[] = { 1, 2, 3, 4, 5, 6 };
        fun(arr, 2, 5);
    }
    
    public static void fun(int a[], int m, int n)
    {
        for (int i = m; i < n; i++) {
            System.out.printf("%d ", a[i]);
        }
    }
    

    响应:3 4 5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-03
      • 2013-05-23
      • 2020-10-27
      • 2011-09-25
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多