如何在java中将部分数组作为函数参数传递?

时间:2014-06-11 17:38:51

标签: java arrays function argument-passing

#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中做同样的事情?

在回复下面的一条评论时,我想添加我实际上要做的事情的细节,因为评论部分太长了。我需要递归地访问一个数组的子节。实际上,我试图通过比较两个数组的中位数来找到两个排序数组的中位数&#34;使用以下算法: 1)计算输入数组ar1 []的中位数m1和m2    和ar2 []分别。 2)如果m1和m2都相等,那么我们就完成了。      返回m1(或m2) 3)如果m1大于m2,则中位数存在于1中    以下两个子阵列。     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

3 个答案:

答案 0 :(得分:5)

如果不会修改数组,您可以使用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]);
    }
}

答案 1 :(得分:1)

最简单的方法是将开始和结束索引传递给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

答案 2 :(得分:0)

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