我是一名编程初学者,我对函数的返回值有疑问。
我正在学习Java。
我附上了我书中的代码,其中包含经典的选择排序。
现在显然书中的代码可以工作了。然而,主函数中的这三行是我的问题的基础:
int []a=new int[]{1,9,2,8,3,7,4,6,5};
排序(一);
if(升序(a)) System.out.println("工作");
所以我的问题是:
在第 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()
to a[]
也改变a[]
在 main 中声明。所以 a 在函数内被改变。然而,你不能说
public static void change(int[] a) {
a = new int[3];
a = {1, 2};
}
这不会改变a
本身,因为这只是创建一个新的内存位置,该参数a
指向,而不改变参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)