#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
答案 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类中的方法,也可以编写自己的代码来执行此操作。