黑马程序员--------java基础--函数和数组的常用的排序方法

来源:互联网 发布:苹果手机怎么清除游戏数据 编辑:程序博客网 时间:2024/05/29 05:04

 

                                                                           -------android培训、java培训、期待与您交流! ----------

 

           一    函数:

                 (一):什么是函数:就是定义在类中的具有特定的功能的一段独立的小程序,也称为方法;

                 (二):函数的格式:

                  (1)无参数的函数:       

                                     访问修饰符   返回值类型  函数名(){

                                                执行语句;

                                      }

                            注意:在无参数的函数中没有具体的返回值时,这时的返回值类型用一个特殊的关键字来标识,该关键字就是void ;

                                        void:代表的是函数没有具体返回值的情况;当函数的返回值类型是void时,函数中return语句可以省略不写

                                                    系统会隐式的返回,要是添加也不会报错;

              (2)无参数的函数:       

                                     访问修饰符   返回值类型  函数名(参数类型 形式参数1,参数类型 形式参数2,........){

                                                执行语句;

                                               return  返回值;

                                      }

                    注意:返回值类型:函数运行后的结果的数据类型。

                               参数类型: 是形式参数的数据类型;

                               形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数,实际参数是传递给形式参数的具体数值;

                              return :用于结束函数,  返回值是将该值返回给调用者 ;

                  (三) 总结 —— 如何定义一个函数:

                                (1):既然函数是一个独立的功能,那么该功能的运算结果是什么要先明确;因为这是在明确函数的返回值类型。

                                (2):在明确定义该功能的过程中是否需要未知的内容参与运算;因为是在明确函数的参数列表(参数的类型和参数的个数)。

                               示例:

                                         需求:定义一个功能,可以实现两个整数的加法运算。

                                         分析: 1: 该功能的运算结果是什么?两个数的和,也是一个整数(int)

                                                        2:在是该功能的过程中是否有未知的内容参与运算? 加数和被加数是不确定的(两个参数 int,int)

                                          代码:

                                                        int getSun(int x ,int  y){

                                                                return x+y ;

                                                        }

              函数的特点:

                               定义函数可以将功能代码进行封装,便于对该功能进行复用;函数只有在被调用时才会被执行,对于函数没有具体返回值的情况,返回值类型用void

                              表示,那么该函数中的return语句如果在最后一行可以省略不写;

                注意:

                             (1)函数中只能调用函数,不可以在函数内部定义函数。

                             (2) 定义函数时,函数的结果应该放回调用者,交由调用者处理。

 

          二   数组:

                         (一):数组的概念:同一种类型数据的集合,其实数组就是一个容器;

                         (二)数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素;

                         (三) 数组格式:

                                  (1) 数据类型[  ] 数组名=new 元素类型 [元素个数或数组的长度];

                                  (2) 数据类型[  ] 数组名=new 元素类型 [元素, 元素, 元素, 元素,.... ];

                        (四)内存结构:

                                             (1)内存结构概述:

                                                             java程序在运行时,需要在内存中分配空间,为了提高运算效率,有对空间进行了不同区域的划分, 因为每一片区域都有特定的数

                                                    据处理方式和内存管理方式。

                                             (2) 栈内存: 用于存储局部变量,当数据使用完,所占用的空间会自动释放。

                                             (3)  堆内存:

                                                        数组和对象,通过new建立的实例都存放在堆内存中,每一个实体都有内存地址值,实体中的变量都有默认的初始值,实体不再被使用时

                                                        会在不确定的时间被垃圾回收器回收;

                      (五) 数组的常用操作:

                                  (1)在操作数组时:一般都是使用循环遍历数组中的元素:在数组中可以通过数组中的一个属性:length  来获取数组中的长度,在循环遍历数组。

                                  (2)在java类中提供了一个类,而sort()是该类的一个方法,该方法的返回值是void,在执行这个方法后数组中的元素会从小到大的进行排序:

                                               其语法是: Arrays.sort(数组名);如示例;                        

 

int[] is={5,4,8,5,1,7,5,555,14};Arrays.sort(is);for (int i = 0; i < is.length; i++) {System.out.println(is[i]+" ");}//排序后的结果: 1  4  5  5  5  7  8  14  555  

                                     选择排序:

public static void getArray(int[] array){//数组长度减一是为了减少一次比较多次数for (int i = 0; i < array.length-1; i++) {  //是为了在第一次比较时让第一个元素和第二个元素比较for (int j = i+1; j < array.length; j++) {//使用if判断获取大的元素值if (array[i]>array[j]) {//使用第三方变量来进行位置交换int temp=array[i];array[i]=array[j];array[j]=temp;}}}//排序后的数组顺序;for (int j = 0; j < array.length; j++) {System.out.print(array[j]+"  ");}}


                                 冒泡排序:相邻的两个元素进行比较,如果符合条件的换位;

//冒泡排序public static void getArray(int[] array){//数组长度减一是为了减少一次比较多次数for (int i = 0; i < array.length-1; i++) {  //-i是让每次比较的元素减少,-1是为了避免角标越界;for (int j = 0; j < array.length-i-1; j++) {//使用if判断两个相邻的元素相比获取大的元素值if (array[j]>array[j+1]) {//使用第三方变量来进行位置交换int temp=array[j];array[j]=array[j+1];array[j+1]=temp;}}}//排序后的数组顺序;for (int j = 0; j < array.length; j++) {System.out.print(array[j]+"  ");}}


 

                                  示例:获取最大值和最小值;    

public static void main(String[] args) {// TODO Auto-generated method stub  int[] is={5,4,8,5,1,7,5,555,14};getArray(is);}public static void getArray(int[] array){if(array.length>0){int max=array[0];//定义一个变量来获取数组中的第一个元素int min=array[0];//定义一个变量获取数组中的第一个元素for (int i = 1; i < array.length; i++) {if(max>array[i]){//循环if判断来获取最大值max=array[i];}if(min<array[i]){min=array[i];}}System.out.println( "最大值是:"+max+"\t最小值是:"+min);}}

                                  折半查找元素在数组中的下标位置;

public static void main(String[] args) {// TODO Auto-generated method stub  //定义要查找到数组必须有序int[] is={3,5,8,11,55,66,88,99};//调用方法int i=getArray(is,11);//获取该元素在数组的下标System.out.println(i);}//折半查找:查找数组中的某个元素第一次出现的位置,如果该元素不存在就返回-1;//注意必须保证数组中的元素是有序的;public static int getArray(int[] array,int number ){//定义大,中,小int min,mix,mid;min=0;mix=array.length-1;//数组的长度mid=(mix+min)/2;//数组的长度折半//循环判断如果找到该值后就退出循环while(array[mid]!=number) {//判断该值与该数组中的中间值值比如果该值大于就把数组的长度折半后在加1;if(number>array[mid]){min=mid+1;//判断该值与该数组中的中间值值比如果该值小于就把数组的长度折半后在减一;}else if(number<array[mid]){mix=mid-1;}//如果数组的长度大于0;就返回-1;if(min>mix){return -1;}//如果没有找到就在折半数组的长度;mid=(mix+min)/2;}return mid;}


 

                     (五)注意:

                              (1) 在操作数组时,访问到了数组中不存在的角标异常 :ArrayIndexOutOfBoundsException  ----数组越界异常!

                             (2)当引用没有任何指向值为null的情况,该引用还在用于操作实体会发生空指针异常:NullPointerException  !

 

 

         -------android培训、java培训、期待与您交流! ----------