小编典典

为什么void函数返回值?

java

我是一名编程初学者,对函数的返回值有疑问。

我正在学习Java。

我已经附上了我的书中具有经典选择排序功能的代码。

现在显然来自本书的代码可以正常工作。但是,主要功能中的以下三行是我的问题的基础:

  1. int [] a = new int [] {1,9,2,8,3,7,4,6​​,5};

  2. 排序(a);

  3. 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;
    }
}

阅读 365

收藏
2020-11-30

共1个答案

小编典典

由于阵列是对象,它们通过它们的参考(其在存储器位置)通过,所以内的变化sort(),以a[]也改变a[]在主声明。因此,在函数内进行了更改。但是,你不能说

public static void change(int[] a) {
    a = new int[3];
    a = {1, 2};
}

那不会改变a本身,因为这只会在a不更改参数的情况下创建参数指向的新存储位置。

2020-11-30