为什么 void 函数有返回值?

2024-02-20

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

我正在学习Java。

我附上了我书中的代码,其中包含经典的选择排序。

现在显然书中的代码可以工作了。然而,主函数中的这三行是我的问题的基础:

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

  2. 排序(一);

  3. 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(使用前将#替换为@)

为什么 void 函数有返回值? 的相关文章

随机推荐