我是一名编程初学者,我对函数的返回值有疑问。
我正在学习 Java。
我附上了我书中的代码,其中包含经典的选择排序。
现在显然书中的代码可以工作了。然而,主函数中的这三行是我的问题的基础:
int []a=new int[]{1,9,2,8,3,7,4,6,5};
排序(a);
if(ascending(a)) System.out.println("Works");
所以我的问题是:
在第 2 行中,如果 sort() 函数为 void,如何检索排序后的 a[]?
这行不应该是:a = sort(a)吗?
public class SelectionSort
{
public static void main(String[]args)
{
int []a=new int[]{1,9,2,8,3,7,4,6,5};
sort(a);
if(ascending(a)) System.out.println("Virðist virka");
else System.out.println("Virkarekki");
}
public static void sort(int[]a)
{
if(a.length<2) return;
int i=0;
while(i!=a.length)
{
int k=i+1;
while(k!=a.length)
{
if(a[k]<a[i])
{
int tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
k++;
}
i++;
}
}
public static boolean ascending(int[]a)
{
if(a.length<2) return true;
int i=1;
while(i!=a.length)
{
if(a[i-1]>a[i]) return false;
i++;
}
return true;
}
}
最佳答案
由于数组是对象,因此它们是通过其引用(它们在内存中的位置)传递的,因此 sort()
到 a[]
中的更改也会更改 a[]
在 main.c 中声明。所以 a 在函数内被改变。但是,你不能说
public static void change(int[] a) {
a = new int[3];
a = {1, 2};
}
这不会改变 a
本身,因为这只是创建参数 a
指向的新内存位置,而不更改参数。
关于java - 为什么 void 函数有返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394493/