黑马程序员_Java基础语法之函数与数组

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

 

函数

1.定义:函数就是定义在类中的具有特定功能的一段独立小程序。(函数也成为方法)

函数的格式:修饰符 返回值类型函数名(参数类型形式参数1,参数类型形式参数2

                     {

                            执行语句;

                            return返回值;

                     }

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

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

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

实际参数:传递给形式参数的具体数值。

return:用于结束函数。

返回值:该值会返回给调用者。

2.特点:定义函数可以将功能代码进行封装;提高代码的复用性;函数只有被调用了才会被执行;对于函数没有具体返回值类型的时候,使用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。

注意:*函数中只能调用函数,不可以在函数内部定义函数。

         *定义函数时,函数的结果应该返回给调用者,交由调用者处理。

3.定义一个函数(两个明确):明确返回值类型;明确函数的参数列表(参数的类型和参数的个数)

java中对功能的定义是通过函数的形式来体现的。

示例:需要定义功能,完成一个整数的*3+5的运算。

classFunctionDemo

{

       public static void main(String[] args)

       {

       getResult(5);

}

       public static void getResult(int num)

       {

              System.out.println(num * 3 + 5);

              return;//可以省略

       }

}

4.函数的重载(overload

概念:再同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可。

特点:与返回值无关,只看参数列表。

好处:方便于阅读,优化了程序设计。

数组

1.定义:同一种类型数据的集合。其实数组就是一个容器。

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

格式:(1)元素类型[]数组名 = new 元素类型[元素个数或数组长度]

        2)元素类型[]数组名 = new 元素类型[]{元素,元素,……}

2.内存结构:为了提高效率,对内存空间进行了不同区域的划分。

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

堆内存:数组和对象,通过new建立的实例对象都存放在堆内存中;每一个实体都有内存地址值;实体中的变量都有默认初始化值;实体不在被使用,会在不确定的时间内被垃圾回收器回收。

方法区、本地方法区、寄存器。

示例:

int []arr = new int [4];

arr>栈内存

newint[4]>堆内存(arr[0],arr[1],arr[2],arr[3])。

3.数组操作常见的问题

空指针异常(NullPointerException)数组引用没有指向实体,却在操作实体中的元素时。

数组角标越界异常(ArrayIndexOutOfBoundsException)访问到了数组中的不存在的角标时发生。

4.常见数组操作

需求1:获取最大值与最小值:

       思路:

       1,获取最值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。通过一个变量进行临时存储。

       2,让数组中的每一个元素都和这个变量中的值进行比较。如果大于了变量中的值,就用该该变量记录较大值。

       3,当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了。

       步骤:

       1,定义变量。初始化为数组中任意一个元素即可。

       2,通过循环语句对数组进行遍历。

       3,在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量;

classArrayTest1

{    

public static void main(String[] args)

       {

              int[] arr ={5,1,6,4,2,8,9};

              int max = getMax(arr);

              int min = getMin(arr);

              System.out.println("max="+max);

              System.out.println("min="+min);

       }

       //获取数组中的最大值。

       public static int getMax(int[] arr)

       {

              int max = arr[0];

              for(int x=1; x<arr.length; x++)

              {

                     if(arr[x]>max)

                            max = arr[x];

              }

              return max;

       }

       //获取最小值。

       public static int getMin(int[] arr)

       {

              int min = 0;

              for(int x=1; x<arr.length; x++)

              {

                     if(arr[x]<arr[min])

                            min = x;

              }

              return arr[min];

       }

}

需求2:对数组进行选择排序和冒泡排序。

对给定数组进行排序{5,1,6,4,2,8,9}。(开发中,对数组排序使用该句代码。Arrays.sort(arr); class ArrayTest2

{

public static void main(String[] args)

       {

              int[] arr = {5,1,6,4,2,8,9};

              //排序前;

              printArray(arr);

              //排序

              selectSort(arr);//选择排序

              //bubbleSort(arr);//冒泡排序

              //排序后:

              printArray(arr);

       }

       //选择排序。内循环结束一次,最值出现头角标位置上。

       public static void selectSort(int[] arr)

       {

              for (int x=0; x<arr.length-1 ;x++)

              {

                     for(int y=x+1; y<arr.length;y++)

                     {

                            if(arr[x]>arr[y])

                            {

                                   swap(arr,x,y);

                            }

                     }

              }

       }

       //冒泡排序

       public static void bubbleSort(int[] arr)

       {

              for(int x=0; x<arr.length-1;x++)

              {                                                            

                     for(int y=0;y<arr.length-x-1; y++)//-x:让每一次比较的元素减少,-1:避免角标越界。

                     {

                            if(arr[y]>arr[y+1])

                            {

                                   swap(arr,y,y+1);

                            }

                     }

              }

       }

/*发现无论什么排序。都需要对满足条件的元素进行位置置换。所以可以把这部分相同的代码提取出来,单独封装成一个函数。*/

       public static void swap(int[] arr,inta,int b)

       {

              int temp = arr[a];

              arr[a] = arr[b];

              arr[b] = temp;

       }

       //打印数组

       public static void printArray(int[] arr)

       {

              System.out.print("[");

              for(int x=0; x<arr.length; x++)

              {

                     if(x!=arr.length-1)

                            System.out.print(arr[x]+",");

                     else

                            System.out.println(arr[x]+"]");

              }           

       }

}

 

需求3:对数组进行折半查找(二分查找)有一个有序的数组,想要将一个元素插入到该数组中,还要保证该数组是有序的。如何获取该元素在数组中的位置。(java提供好的一个进行折半查找的功能。开发时使用这个。int x =Arrays.binarySearch(arr,190);)

classArrayTest3

{

       public static void main(String[] args)

       {

              int[] arr = {2,4,5,7,8,19,32,45};

              int index = halfSearch (arr,9);

              System.out.println("index="+index);//5

       }

       public static int halfSearch(int[]arr,int key)

       {

              int min = 0,max =arr.length-1,mid;

 

              while(min<=max)

              {

                     mid = (max+min)>>1;

                     if(key>arr[mid])

                            min = mid + 1;

                     else if(key<arr[mid])

                            max = mid - 1;

                     else

                            return mid;

              }

              return -1;

       }

}

需求4:进制转换

classArrayTest4

{

       public static void main(String[] args)

       {

              toBin(-6);

              toHex(-60);

              toBa(60);

       }

       //十进制-->二进制

       public static void toBin(int num)

       {

              trans(num,1,1);

       }

       //十进制-->八进制

       public static void toBa(int num)

       {

              trans(num,7,3);

       }

       //十进制-->十六进制

       public static void toHex(int num)

       {

              trans(num,15,4);

       }

 

       public static void trans(int num,intbase,int offset)

       {

              if(num==0)

              {

                     System.out.println(0);

                     return ;

              }

              char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

              char[] arr = new char[32];

              int pos = arr.length;

              while(num!=0)

              {

                     int temp = num & base;

                     arr[--pos] = chs[temp];

                     num = num >>>offset;

              }

              for(int x=pos; x<arr.length;x++)

              {

                     System.out.print(arr[x]);

              }

              System.out.println();

              return ;

       }

}

 

二维数组

1.格式(1int[][]arr = new int[3][2];:定义了名称为arr的二维数组,二维数组中有3个一位数组,每个一维数组中有2个元素。

格式(2int[][]arr = new int[3][];:二维数组中有3个一维数组,每个一维数组都是默认初始化值null

格式(3int[][] arr = {{123},{456},{789}};:定义一个名称为arr的二维数组,二维数组中有3个一维数组,每个一维数组的元素也都已初始化。

特殊写法情况:int[]x,y[];x是一维数组,y是二维数组。

2.示例:定义一个二维数组打印二维数组中元素的和。

classArray2Demo

{

       public static void main(String[] args)

       {    

              int[][] arr ={{3,5,1,7},{2,3,5,8},{6,1,8,2}};

              System.out.println(arr.length);//打印是二维数组的长度 3

              System.out.println(arr[0].length);//打印二维数组中第一个一维数组长度

              int sum = 0;

              for(int x=0; x<arr.length;x++)

              {

                     for(int y=0;y<arr[x].length; y++)

                     {

                            sum = sum +arr[x][y];

                     }

              }

              System.out.println("sum="+sum);

       }

}

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值