我是一名编程初学者,对函数的返回值有疑问。
我正在学习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[]在主声明。因此,在函数内进行了更改。但是,你不能说
sort()
a[]
public static void change(int[] a) { a = new int[3]; a = {1, 2}; }
那不会改变a本身,因为这只会在a不更改参数的情况下创建参数指向的新存储位置。
a