精华内容
下载资源
问答
  • java数组作为函数参数
    万次阅读 多人点赞
    2019-06-01 16:00:18
    package test03;
    
    public class test {
    
        public static void array(int [] arrayA){
            arrayA[0]=0;
        }
        public static void main(String[] args) {
            int [] arrayA = new int []{1,2,3,4};
            array(arrayA);//传递的是地址值
            System.out.printf("%d",arrayA[0]);
    
    
        }
    }
    
    

    在程序中,调用方法并且把数组的名称作为参数传递到方法中。
    本质上是传递数组的地址值。
    既然传递的是数组的地址,那么方法就可以通过数组的地址改变内存中数组的内容。
    类似于C语言中调用函数传递数组的指针一样。可以在函数中通过指针改变数组的内容。
    所以在JAVA当中,数组为引用类型,可以把数组作为参数传递到方法中去改变数组。

    更多相关内容
  • 数组作为函数参数 数组可以作为参数传递给方法。 public class Demo03 { public static void main(String[] args) { test01(new int[]{1,4,5,8,33}); } /** * @param array 数组作为参数 */ public ...

    数组作为函数的参数

    数组可以作为参数传递给方法。

    public class Demo03 {
        public static void main(String[] args) {
            test01(new int[]{1,4,5,8,33});
    
        }
    
    
        /**
         * @param array 数组作为参数
         */
        public static void test01(int[] array){
            for (int i = 0; i < array.length; i++) {
                System.out.print(array[i]+" ");
    
            }
        }
    
      
    

    多维数组

    多维数组可以看做是数组的数组,比如二维数组就是个特殊的一维数组,其中每个元素是一个一维数组;

    定义二维数组

    int a[][] = new int[2][3];
    

    以上数组可以看做是两行三列的数组;

    遍历二维数组:

    案例:

     public static void main(String[] args) {
            int[][] arr = {{11,22},{33,44},{55,66}};
            System.out.println(arr[0][1]);
    
            for(int i =0;i<arr.length; i++){
                for (int j = 0;j<arr[i].length;j++){
                     System.out.println(arr[i][j]);
                }
    
        }
    
    
        }
    
    展开全文
  • 1 数组作为参数 我们可以将数组作为参数,传入到函数中,其实就...就是用数组作为函数参数; 又如, [java] view plain copy public class ArrayPar { public static void printArray(int []

    1 数组作为参数

    我们可以将数组作为参数,传入到函数中,其实就像我们main函数中 public void main(String [] args){};就是用数组作为函数参数;

    又如,

    1. public class ArrayPar  
    2. {  
    3.     public static void printArray(int [] array)  
    4.     {  
    5.         for(int i=0;i<array.length;i++) 
    6.             System.out.print(array[i]+"  ");  
    7.     }  
    8. }  
    我们可以这样调用 ArrayPar.printt(new int[ ]{3,2, 5,67});调用数组

    这里的new int[ ]{3,2,5,67};他也是一种创建数组的方法,只是这种方法创建出来的数组是没有名字的,所以叫匿名数组。很多时候在只使用一次的时候可以使用匿名数组的方法法,类似的还有匿名类。

    Java uses pass-by-value to pass arguments to a method. There are important differences
    between passing the values of variables of primitive data types and passing arrays.
    ■ For an argument of a primitive type, the argument’s value is passed.
    ■ For an argument of an array type, the value of the argument is a reference to an array;
    this reference value is passed to the method. Semantically, it can be best described as
    pass-by-sharing, i.e., the array in the method is the same as the array being passed.
    So if you change the array in the method, you will see the change outside the
    method.

    java 使用值传参(pass_by_value)的方式来传递函数参数,只是值传递方式在处理原始数据类型参数与引用类型参数时候有不同,如果一个参数是原始数据类型,那么参数变量的值传递进去。如果是引用类型,是传进了引用变量的值(也就是说,只是将指向数据的引用的值给传进去了,也就是被调用的函数新建的空间放的是这个引用的值,那么也就是也指向了数组存在的内存),所以同样是值传递,引用类型的传入的当然是引用变量的值,指向了同一数组,那么函数内对数组进行的修改在函数退出后依旧是有效的。

    例子:

    1. public class ArrayPar  
    2. {  
    3.     public static void main(String [] args)  
    4.     {  
    5.         int x=1;  
    6.         int y[]={1,2,3};  
    7.         change(x,y);  
    8.         System.out.println("x="+x+",y[0]="+y[0]);  
    9.     }  
    10.     public static void change(int num,int [] array)  
    11.     {  
    12.         num=100;  
    13.         array[0]=100;  
    14.     }  
    15. }  

    图形表示:


    这里同时注意一下,当我们用new 以及malloc这些的内存空间是在堆上heap,而像我们被调用的函数中使用的这些变量等在栈上。在调用changes时候,x的值被传入,在被调用的函数中重新开辟一个空间来放这个基本数据类型参数,但是int [ ] y ,将y传入其实就是传入了引用,在被调用的函数的栈上只会开辟一个空间来存放这个引用,所以被调用的函数与调用者 中两个引用指向堆上同一块内存。


    2 数组做为函数返回值

    1. public static<span style="color:#ff0000;"int []</span> reverse(int [] array)  
    2. {  
    3.     int [] result=new int[array.length]  
    4.     for(int i=0;i<array.length;i++)  
    5.     {  
    6.         result[i]=array[lenght-i];  
    7.     }  
    8.     return result;
    9. }  
    在将数组作为函数返回值时候如上红色标出的,就是在函数名字前加上返回值类型是int [ ] 表示返回一个int型数组,在函数体内最后返回是result这样的函数引用。


    Case Study: Counting the Occurrences of Each Letter

    write a program to count the occurrences of each letter in an random array of  lower  characters.

    那么我们可以怎么做呢?

    1)首先是要产生一个随机char数组  creatArray();(是否记得前边说过产生[a,a+b)之间的一个随机数 为  a+Math.random()*b,是否记得我们创建过获取任意字符的一个类?)

    2) 创建一个数组 int [ ] count,长度26,准备来存放各个字母的计数

    3)对数组进行循环 , 每读取一个字母ch,则 count[ch-'a']++;

    1. class RandomChar  
    2. {  
    3.     public static char getRandomChar(char ch1,char ch2)  
    4.     {  
    5.         return (char)(ch1+Math.random()*(ch2-ch1+1));  
    6.     }  
    7.     public static char getLowerCaseLetter()  
    8.     {  
    9.         return getRandomChar('a','z');  
    10.     }  
    11.     public static char getUpperCaseLetter()  
    12.     {  
    13.         return getRandomChar('A','Z');  
    14.     }  
    15.     public static char getDigitalLetter()  
    16.     {  
    17.         return getRandomChar('0','9');  
    18.     }  
    19.     public static char getRandomLetter()  
    20.     {  
    21.         return getRandomChar('\u0000','\uFFFF');  
    22.     }  
    23. }  
    24. public class CountOccur  
    25. {  
    26.     public static void main(String [] args)  
    27.     {  
    28.          char [] array=CreateArray();  
    29.          int [] count = new int[26];  
    30.          for(int i=0;i<array.length;i++)  
    31.          {  
    32.              count[array[i]-'a']++;  
    33.          }  
    34.          for(int i=0;i<count.length;i++)  
    35.          {  
    36.             System.out.print((char)(i+'a')+": "+count[i]+"    ");  
    37.             if((i+1)%10==0) System.out.println();  
    38.          }  
    39.            
    40.            
    41.     }  
    42.     //产生一个100个元素的小写随机数组  
    43.     public static char[] CreateArray()  
    44.     {  
    45.         char [] a=new char[100];  
    46.         for(int i=0;i<a.length;i++)  
    47.         {  
    48.             a[i]=RandomChar.getLowerCaseLetter();  
    49.         }  
    50.         return a;  
    51.     }  
    52. }  



    3 可变长度参数列表

    You can pass a variable number of arguments of the same type to a method. The parameter in
    the method is declared as follows:
    typeName... parameterName
    In the method declaration, you specify the type followed by an ellipsis Only one vari-
    able-length parameter may be specified in a method, and this parameter must be the last para-
    meter. Any regular parameters must precede it.
    Java treats a variable-length parameter as an array. You can pass an array or a variable
    number of arguments to a variable-length parameter. When invoking a method with a variable
    number of arguments,
    Java creates an array and passes the arguments to it

    我们可以传递类型相同,但个数可以变化的参数到函数中,如果有这个需求的话,这时候我们只需要在形式参数中使用 typename...parameterName就可以达到这个目的,要注意,在这里声明的该变长参数必须是最后一个参数,任何常规参数必须在他之前,也就是说你可以有 MethodName(char b, double c, int ... nums) 这样的形式即int ... nums必须在最后一个位置,你不能将int ... nums 声明在参数参数列表的非最后位置。

    java将可变长参数当做数组对待。可以将一个数组或者可的参数个数传递给该参数(注意,我们这里说该参数就是 typeName ... parameterName这整个结构),无论哪种形式,java会创建一个数组并把参数传给他,注意这里体会原文说的When invoking a method with a variable
    number of arguments, java Create an array and passes the arguments to it
    ,也就是说,如果你是传入几个变长的变量,那么在调用时候java先将创建一个数组来装这几个实际参数,然后再执行调用的函数,如果本身我们传入一个数组,其实他并不会创建一个新的数组来装,还是一样像上面指向了已经分配的数组空间,所以在被调用的函数中对数组的改变在退出时候还是有效的(这是我用例子试了下体会到的)

    1. public class VariablePar  
    2. {  
    3.     public static void main(String [] args)  
    4.     {  
    5.         int array[]={1,4,7,2,0};  
    6.         System.out.println("max="+findMax(array));  
    7.         ifChange(array);  
    8.         System.out.println("array[0]="+array[0]);  
    9.         ifChange(1,45,33);  
    10.     }  
    11.     public static int findMax(int ... nums)  
    12.     {  
    13.         if(nums.length==0)   
    14.         {  
    15.             System.out.println("No argumment passed");  
    16.             return -1;  
    17.         }  
    18.         int max=nums[0];  
    19.         for(int i=1;i<nums.length;i++)  
    20.         {  
    21.             if(max<nums[i]) max=nums[i];  
    22.         }  
    23.         return max;  
    24.     }  
    25.     //测试这里究竟是新创建一个数组还是相当于把引用传进来而已  
    26.     public static void ifChange(int ... nums)  
    27.     {  
    28.         nums[0]=100;  
    29.     }  
    30. }  
    这里,我们从findMax中看到,他不用先说明 什么就可以直接使用nums.lenght 说明确实java是完全将这类型的参数当做一个数组来处理了,二在ifChange中,我们看到输出的是array[0]=100,说明我们在调用ifChange(array)时候并不是重新创建一个新的数组,而是还是一样像前边的传入了引用,被调用者还是指向了相同的数组空间。但是在ifChage(1,45,33)这个调用时候,java就会先new int[ ]{1,45,33} 这样,然后形参nums再指向它,其实这样返回后应该就不会改变了1的值吧?
    展开全文
  • 二维数组作为函数参数

    千次阅读 2020-03-22 21:32:57
    问题:已有二维数组a[n][m] (m,n为常量整数) int a[n][m]; 如果我们要编写一个函数对这个数组进行处理,我们应该怎样声明函数的形参,又怎样在调用函数时...对函数传参时,直接把一维数组的名字作为参数传入。...

    问题:已有二维数组a[n][m] (m,n为常量整数)

    int a[n][m];

    如果我们要编写一个函数对这个数组进行处理,我们应该怎样声明函数的形参,又怎样在调用函数时引入二维数组这个参数呢?

    • 首先我们来看对一维数组是怎么做的

    void main()
    {
        int vec[n];
        fun1(vec);    
    }

    对函数传参时,直接把一维数组的名字作为参数传入。

    在定义函数的形参时有两种方式

    void fun1(int *vec);
    
    void fun1(int vec[]);
    

    因为这里的vec同时也是一个指向整形的指针,指向的是数组第一位的元素,所以以上两种形参都是符合要求的。

    在fun1函数的实现里面,可以通过*(vec+i)或者vec[i]来访问数组元素。

    • 那么二维数组是跟上面的方法一样吗

    如果是按一维数组的方式,会写成这样

    void fun2(int **a)
    {
        a[i][j];
    }
    void main()
    {
        int a[n][m];
        fun2(a);
    }
    

    这是错误的写法。原来我是错误的把二维数组的名字a理解成指针的指针,而实际上这里的a是一个指向整形数组的指针

    int (*p)[m];

    比如这个p就是一个指向包含m个整形元素的数组的指针,p=a的操作是合法的。

    所以fun2的原型可以是以下形式(假设m=10)

    void fun2(int (*mat)[10]); //假设m=10
    void fun2(int mat[][10]);

    这样我们就可以在函数原型中访问二维数组的元素mat[i][j]
    这里我们需要注意的是在定义时多维数组的第2个及以后的下标不能为空,为什么是这样设定呢,拿二维数组举例,二维数组的元素在内存空间的地址是连续的,从mat[0][0]开始,一直到mat[0][m-1],接着是mat[1][0]到mat[1][n-1],也就是说“每一行”的数据是接在上一“行”数据的后面存放的所以mat[i][j]相对于mat[0][0]的位置是i*(m-1)+j,编译器就是通过这样的方式来从一维的存储地址中找到二维数组的元素,所以第二维的长度m的值是必须的,而第一维的长度n的值是可以省略的。

    • 如果定义形参时不知道数组的大小呢

    对于一维数组来说,因为在定义形参时是不用指明数组大小的,自然没有这个问题,但是二维数组作为形参时是至少要写明第二维及以后的维度的长度,而很多时候数组的大小是不确定的,这时该怎么办呢。

    这时我们可以想,如果可以像一维数组一样可以通过第一个元素的地址加上偏移量来访问数组元素就好了,实际上这是可行的。

    上面提到二维数组名字a是“一个指向包含m个整形元素的数组的指针”,同一维数组名字vec指针指向的是数组的第一个元素相似,二维数组名字a指向的是二维数组中第一个“包含m个整形元素的数组”,即以0为一维坐标的这段数据的这个数组a[0],对a这个一维数组再取地址&a,就可以得到a[0][0]的地址,即整个二维数组在存储空间中的第一个数的地址,通过这个地址,再结合上面提到的求二维数组的地址偏移量的方法就可以实现通过首地址加地址偏移量的方法来访问数组的内容。所以我们可以用下面这种方式实现

    void fun2(int *head,n,m)
    {
        *(head+i*(m-1)+j) //访问mat[i][j]的值
    }
    
    void main()
    {
        int n,m;
        ...     //给n和m赋值
        int mat[n][m];
        fun2(&mat,n,m);
    }

    以上理论参考自《c和指针》p159

    总结:二维数组的不同主要还是因为二维数组的名字和一维数组的名字的含义不同,还有二维数组的存储方式对于语法的影响,这些都跟编译器的设定有关,更高维的数组又是什么样的设计还没了解,记得以前见过一个题提到java中二维数组必须有第一维的长度,而c中必须有第二维的长度,是因为java的二维数组是另外一种存储方式还是因为java的编译器是另外的寻址规则,这些还可以进行更加深入的探究

     

    展开全文
  • 数组作为方法参数 数组作为方法的返回值 代码: package com.company; import org.w3c.dom.ls.LSOutput; public class Main { public static void main(String[] args) { int[] array = {12, 34, 21, 65, 32, ...
  • 数组作为方法参数和返回值 以前的方法中我们学习了方法的参数和返回值,但是使用的都是基本数据类型。那么作为引用类型的数组能否作为 方法的参数进行传递呢,当然是可以的。 数组作为方法参数传递,传递的参数是...
  • 我想使用类似于java获取数组长度的方法,结果经过查资料发现没有,于是我想到了sizeof,整个数组的字节长度除以某一个数组的值(eg:数组的第一个数)的长度,就是数组的长度,于是我把它写成了一个函数,但是问题...
  • 数组作为方法的参数,传递进去的其实是数组的地址值。 数组作为方法的返回值,返回的其实也是数组的地址值。 public class Demo02ArrayReturn { public static void main(String[] args) { i...
  • Java基础-13-数组作为方法的参数

    千次阅读 多人点赞 2019-10-21 14:56:47
    数组作为方法的参数 1、基本用法 代码示例:打印数组内容 public static void main(String [ ] args){ int [ ] arr={1,2,3}; printArry(arr); } public static void printArray(int [ ] a){ for(int x:arr){ ...
  • 2.在用数组作为函数参数时,不是进行值得传递,即不是把是参数组的每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译系统不为形参分配内存。那么数据的传递究竟如何实现?我们都知道,...
  • 二维数组作为参数,传入函数(最好用的) 很多时候我都是直接通过传入一个 固定的数字来传递一个二维数组, 比如这样子定义函数 int fun(int a[][3],int n) 调用函数是 fun(a,n); 这样子调用的二维数组只能是固定...
  • C语言-二维数组函数参数

    千次阅读 2017-09-04 14:36:05
    文章目录 1 引例 2 观点1 这种使用方法是错误的 3 观点2 根本不需要这么做 4 二维数组函数参数的方法 4.1 方法1 4.2 方法2 4.3 方法3 5 与Java的不同 1 引例 下面的程序很简单,定义了一个PrintMatrix函数将一个二...
  • JAVA--方法(函数)数组

    2021-02-25 20:29:22
    概念:方法,也叫函数,但是一般在java中都叫方法,可以看成是一个可以完成独立功能的代码块,可以反复使用,每次使用都是独立的!存在于类的结构体1) X + Y = Z;代入不同的值,可以求到不同的结果2) 函数可以反复...
  • Java数组分割实现

    千次阅读 2021-03-26 10:14:31
    * 分割数组 * * @param array 原数组 * @param Size 分割后每个数组的最大长度 * @param <T> 原数组的类型 * @return */ public static <T> List<Object[]> splitArray(T[] array, int ...
  • JNI学习笔记:数组作为函数参数

    千次阅读 2018-03-21 17:54:53
    2 一维数组作为函数参数传值的Demo 2.1 代码示例 2.2 程序分析 2.3 函数释义 3 数组作为返回值的Demo 3.1 代码示例 3.2 函数释义 4 一维数组作为函数参数的总结 1 前言 本文将展示如何从Java代码中,...
  • java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释2009-10-1520:21***对象作为参数传递***classpassparam{intx;publicstaticvoidmain(String[]args){passparamobj...
  • 数组 $array = ['name' => 'tom', 'age' => 20, 3, 4, 5, 'a', 'b']; 每3个分割一组 $chunk_result = array_chunk($array, 3); 结果 Array ( [0] => Array ( [0] => tom [1] => 20 [2] => 3 ) [1] => ...
  • 数组函数定义中的使用格式(int[] OrphanCount)调用的时候一般使用: int[] OrphanCountBefore = new int[2];theCalledMethod(OrphanCountBefore);这是公共函数public void GetOrphanCount(int[] OrphanCount) {int...
  • java获取数组最大值的函数,超详细

    千次阅读 2021-06-17 13:35:27
    当时,反复检查了代码,确定查询缓存的次数已经是最少了,而且连接线程池相关参数也调到一个相对较大且合理的值了。如果,再压测还是无法达到要求的话,只有出最后一招了:缓存结果集。即,以用户ID和用户搜索的...
  • JAVA数组参数

    千次阅读 2017-03-22 09:13:16
    可以将数组作为参数传递给方法或构造函数。传递给该方法的数组的类型必须是与形式参数类型兼容的赋值(即,形参和实参的数组类型要一样。 以下代码显示了如何将数组作为方法参数传递 - public class Main { public ...
  • Java总结-函数数组

    千次阅读 2020-12-29 00:13:32
    函数:特点:1,程序中一段独立的小程序。2,该程序实现了独立功能。3,被调用才会被执行。...其实是为了明确函数参数列表。int add(int x,int y){return x+y;}main(){int x = add(4,5);System.ou...
  • Java 数组

    千次阅读 多人点赞 2022-03-21 14:45:49
    本文章介绍了Java数组的一些概念和一些方法的使用。
  • Java实现接收数组参数

    千次阅读 2020-05-21 18:30:08
    1.如果传递的参数类型是 String 参数内容是 11,12,13 然后转数组: 实现代码: String[] params = menuIds.split(","); 2.如果传递的参数类型是String 参数内容是 [11,12,13] 然后转数组: 实现代码: ...
  • 升序: // 数组排序(从小到大) import java.util.Arrays; public class arr_smalttoarge{ public static void main(String[] agrs){ ... //集合自带的排序方法,把数组a作为参数,可以得到排序后的数组a
  • 主要介绍了java编程中拷贝数组的方式及相关问题分析,分享了Java数组复制的四种方式,其次对二维数组的简单使用有一段代码示例,具有一定参考价值,需要的朋友可以了解下。
  • java数组

    千次阅读 2021-03-06 01:07:34
    数组的定义数组是引用数据类型三种当中的其中一种。概念:同一种类型数据的集合。其实数组就是一个容器。数组的好处:可以自动给数组中的元素从0开始标号,方便操作这些元素。格式1:元素类型[] 数组名= new元素类型...
  • 首先我们先说一下reverse方法。 reverse 方法将一个 Array 对象中的元素位置进行反转。... 如果数组中只包含数字,那么数字将降序排列,如果数组中还包含其他类型,就将数组反转并返回数组。 sort 方法 返回
  • 题目: 重点理解数组作为参数时的“引用类型” ...但是当我们的参数传的是数组类型时,此时在函数内部修改数组的内容,函数的外部也会发生改变,这里就涉及到了一个数组名“引用”的问题 源码: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 404,557
精华内容 161,822
关键字:

java数组作为函数参数