A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /*
  2. 对给定数组进行排序。
  3. {5,1,6,4,2,8,9}
  4. */

  5. class ArrayTest2
  6. {
  7.         public static void selectSort(int[] arr)
  8.         {
  9.                 for(int x=0;x<arr.length-1;x++)//当取最后一个角标的时候没有必要比了,没有必要遍历最后一个角标。
  10.                 {
  11.                         for(int y=x+1;y<arr.length;y++)
  12.                         {
  13.                                 if(arr[x]>arr[y])
  14.                                 {
  15.                                    swap(arr,x,y);
  16.         }       
  17.                   }
  18.                 }       
  19.          }
  20.        
  21.         public static void swap(int[]arr,int a,int b)
  22.         {
  23.                 int temp=arr[a];
  24.                 arr[a]=arr[b];
  25.                 arr[b]=temp;       
  26.         }
  27.        
  28.        
  29.         public static void main(String[] args)
  30.         {
  31.           int[] arr={5,1,6,4,2,8,9};
  32.           //在排序前打印。
  33.           printArray(arr);
  34.           selectSort(arr);
  35.           //在排序后打印。
  36.           printArray(arr);
  37.         }
  38.        
  39.         public static void printArray(int[] arr)
  40.           {
  41.                   System.out.print("[");
  42.                   for(int x=0;x<arr.length;x++)
  43.                   {
  44.                           if(x!=arr.length-1)
  45.                              System.out.print(arr[x]+", ");
  46.                           else
  47.                              System.out.println(arr[x]+"]");       
  48.       }       
  49.     }
  50. }
复制代码
大家好!代码中这句public static void selectSort(int[] arr)
参数类型为什么是int[] arr呢?如果你指定了一个数组,那么数组不就是确定的了嘛,对不对呀
始终想不明白,我没有觉得我钻牛角尖哦, 求大神解释下 谢谢了。


评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 淡定

查看全部评分

13 个回复

倒序浏览
数组和对象一个道理 你传入一个person 可以给他改名字 改年龄 你传入数组 你可以改他该元素位置
回复 使用道具 举报
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2){
}
函数的格式,括号里的意思是接收什么类型的参数,你要操作的是数组,就需要接收数组类型的变量.

函数接收的int[] arr,并不是指主函数里定义的那个数组arr,
而是说,你传递一个整数数组类型的变量给这个函数,这个函数将在它的内部,把接收到的数组变量赋值给函数内部的局部成员变量arr来使用.(因为不确定从主函数里传递过来的变量名到底是什么,所以接收到这个数组变量之后,统一赋值给arr这个局部变量来使用,方便操作.)
这个局部成员变量arr只在函数自身的范围内有效,虽然这个局部成员变量是接收了主函数里的arr变量,但实际是另外一个变量指向了主函数里的arr变量而已.

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 很给力!

查看全部评分

回复 使用道具 举报
cxdzh 发表于 2014-10-25 13:24
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2){
}
函数的格式,括号里的意思是接收什 ...

不得不佩服  你理解的很深刻 但是这句话是什么意思啊  虽然这个局部成员变量是接收了主函数里的arr变量,但实际是另外一个变量指向了主函数里的arr变量而已.
回复 使用道具 举报
我为你着迷 发表于 2014-10-25 13:43
不得不佩服  你理解的很深刻 但是这句话是什么意思啊  虽然这个局部成员变量是接收了主函数里的arr变量, ...

主函数里的arr是存储了一个内存地址指向一片内存空间.

调用的函数里的arr,是在调用这个函数的时候,另外新建一个局部的成员变量,将主函数里的arr存储的内存地址赋值给它,

虽然指向的是同一个地址,但两者是两个不同的变量.
回复 使用道具 举报
你排序算法错了,去搜索下冒泡排序算法
回复 使用道具 举报
ximi 发表于 2014-10-25 13:50
你排序算法错了,去搜索下冒泡排序算法

嗯 ????
回复 使用道具 举报
cxdzh 发表于 2014-10-25 13:50
主函数里的arr是存储了一个内存地址指向一片内存空间.

调用的函数里的arr,是在调用这个函数的时候,另外 ...

奥 意思就是arr是两个不同的变量 ,两个不同的引用指向了同一个数组。我明白了啊 谢谢你啊  
回复 使用道具 举报
我为你着迷 发表于 2014-10-25 13:43
不得不佩服  你理解的很深刻 但是这句话是什么意思啊  虽然这个局部成员变量是接收了主函数里的arr变量, ...

(因为不确定从主函数里传递过来的变量名到底是什么,   这句话的意思是你可以接收arr变量也可以接收x变量或者y变量  是这个意思吗  
回复 使用道具 举报

能指点下嘛  亲  哪里错了啊  
回复 使用道具 举报
本帖最后由 wzg1015 于 2014-10-25 18:24 编辑

int[]  看成一个类型,代表着后面的变量是指向一个Int数组的,至于数组有多长是不需要管的,因为java将数组当成了一个对象,你只要知道了地址,就是知道了全部。不像C/C++,由于没有存储长度,所以需要程序员自己控制。
也就是说没有int[5] arr 是错误的。因为没有int[5]这个类,编译器无从下手。
其实java除了基本类型,其余的全部是地址,变量前面的代表着类型
回复 使用道具 举报
Dream. 中级黑马 2014-10-25 18:45:19
12#
数组是长度固定, 里面的值可以变啊
回复 使用道具 举报
还不理解楼主疑惑的是什么 (int[] arr),楼主可以理解问int[] 是数组类型,如果你只传arr,那么编译就必定会通不过的,因为缺少了类型,记住括号里的格式(变量类型 变量名);
回复 使用道具 举报
2014heima 发表于 2014-10-25 20:27
还不理解楼主疑惑的是什么 (int[] arr),楼主可以理解问int[] 是数组类型,如果你只传arr,那么编译就必 ...

昂 我疑惑的是数组类型不是确定的嘛   主函数里边不是已经定义了数组了嘛   所以我理解成了不需要未知内容参与运算的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马