黑马程序员_Java函数和数组
来源:互联网 发布:pandomo磐多魔 知乎 编辑:程序博客网 时间:2024/05/29 16:04
函数
函数的定义
什么是函数?
函数就是定义在类中的具有特定功能的一段独立小程序。
函数也称为方法。
函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,)
{
执行语句;
return返回值;
}
其中:
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该值会返回给调用者。
函数的特点
定义函数可以将功能代码进行封装
便于对该功能进行复用
函数只有被调用才会被执行
函数的出现提高了代码的复用性
对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
函数中只能调用函数,不可以在函数内部定义函数。
定义函数时,函数的结果应该返回给调用者,交由调用者处理。
函数的应用
如何定义一个函数呢?
1.既然函数是一个独立的功能,那么该功能的运算结果是什么先明确。
因为这是在明确函数的返回值类型。
2.再明确定义该功能的过程中是否需要未知的内容参与运算。
因为这是在明确函数的参数列表(参数类型和参数个数)。
需求:定义一个功能,完成3+4的运算,并将结果返回给调用者。
/*
1.明确功能的结果:是一个整数的和。
2.在实现该功能的过程中,是否有未知内容参与运算。没有。
其实这两个功能就是在明确函数的定义。
1是在明确函数的返回类型。
*/
public static int getSum()
{
return 3+4;
}
以上这个函数的功能,结果是固定的,毫无扩展性可言。
为了方便用户需求,由用户来指定加数和被加数。这样功能才有意义。
思路:
1.功能结果是一个和,返回值类型是int。
2.有未知内容参与运算。有两个,这两个未知内容的类型都是int。
public static int getSum(int x, int y)
{
return x+y;
}
练习:1.定义一个功能,用于打印矩形。
2.定义一个打印99乘法表功能的函数。
class MyFunction{public static void main(String[] args) {function(2,3);function2();}/*思路:1.确定结果:没有,因为直接打印,所以返回值是void2.有未知内容么?有,矩形的长和宽。*/public static void function(int row, int col){for(int x=0;x<row;x++){for(int y=0;y<col;y++){System.out.print("*");}System.out.println();}}/*思路:1.确定结果:没有,因为直接打印,所以返回值为void2.有未知内容么?没有。*/public static void function2(){for(int x=1;x<=9;x++){for(int y=1;y<=x;y++){System.out.print(x+"*"+y+"="+x*y+"\t");}System.out.println();}}}
函数的重载(overload)
什么时候用重载?
当定义的功能相同,但参数运算的未知内容不同。
那么,这时就定义一个函数名称以表示其功能,方便阅读,而通过参数列表的不同来区分多个同名函数。
数组
数组的定义
数组的内存分配及特点
数据内存结构
堆内存中的实体都有默认初始化值。
int类型默认0。boolean类型默认false。
当arr不想再指向堆内存中的地址时,用arr = null;引用数据类型清空用null。
数组操作常见问题
int[] arr = new int[3];
System.out.println(arr[4]);
这段程序在编译的时候没有错误提示,因为开辟数组空间是在运行的时候进行的。在运行的时候才会报错。
ArrayIndexOutOfBoundsException(操作数组时访问到了数组中不存在的角标)
NullpointerException:空指针异常:当引用没有任何指向值,为null的情况,该引用还在用于操作实体时。
数组常见操作
获取数组中的元素:通常会用到遍历。
int[] arr = new int[3];
数组中有一个属性可以直接获取到数组元素个数:length。
使用方法:数组名称.length =
for(int x=0;x<arr.length;x++)
{
System.out.println(arr[x]);
}
练习:给定一个数组{5,1,6,4,2,8,9}。
1.获取数组中的最大值和最小值。
class MyArrayTest{public static void main(String[] args) {int[] arr = {5,1,6,4,2,8,9};int max,min;max = min = arr[0];for(int x=1;x<7;x++){if(arr[x]>max)max = arr[x];if(arr[x]<min)min = arr[x];}System.out.println("max="+max+";"+"min="+min);}}
对给定数组进行排序。
1.选择排序:
2.冒泡排序:
/*
对给定数组进行排序。
1选择排序:第一个元素跟后面的元素依次比较,选出最小的元素放在第一个的位置,然后再第二个元素跟后面的元素依次比较,以此类推。
2冒泡排序:相邻的两个元素进行比较,如果符合条件就换位。
*/
/* 对给定数组进行排序。1选择排序:2冒泡排序:*/class MyArrayTest2{public static void main(String[] args) {int[] arr = {3,1,4,2,7,5};selectsort(arr);bubblesort(arr);}//选择排序:public static void selectsort(int[] arr){int temp =0;for(int x=0;x<arr.length-1;x++){for(int y= x+1;y<arr.length;y++){if(arr[y]<arr[x]){temp = arr[x];arr[x] = arr[y];arr[y] = temp;}}}printArray(arr);}//冒泡排序:public static void bubblesort(int[] arr){for(int x=0;x<arr.length;x++){for(int y=0;y<arr.length-x-1;y++){if(arr[y+1]<arr[y]){int temp =arr[y];arr[y] = arr[y+1];arr[y+1] = arr[y];}}}printArray(arr);}//定义一个打印数组的函数: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]+",");elseSystem.out.println(arr[x]+"]");}}}
发现无论什么排序,都需要对满足条件的元素进行位置置换。
所以可以把这部分相同的代码提取出来,单独封装成一个函数。
public static void swap(int[] arr,int a,in b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
在java实际开发中排序一般直接用:Arrays.sort(arr);
数组的查找操作。
折半查找,提高效率,但是必须要保证该数组是有序数组。
public static int halfSearch(int[] arr,int key){int max = arr.length-1;int min = 0;int mid = (max+min)/2;while(arr[mid] != key){if(arr[mid]>key)max = mid-1;elsemin = mid+1;if(min>max)return -1;mid = (max+min)/2;}return mid;}
进制转换:
十进制转二进制
十进制转十六进制
class MyToBinTest{public static void main(String[] args) {toBin(6);toBin1(-6);toHex(60);toHex1(60);}//十进制转二进制。public static void toBin(int num){StringBuffer sb = new StringBuffer();while(num>0){sb.append(num%2);num = num>>1;}System.out.println(sb.reverse());}//十进制转十六进制。public static void toHex(int num){StringBuffer sb = new StringBuffer();for(int x=0;x<8;x++){int temp = num & 15;if(temp>9)sb.append((char)(temp-10+'a'));elsesb.append(temp);num = num >>> 4;}System.out.println(sb.reverse());}/* 查表法:将所有的元素临时存储起来,建立对应关系。 每一次&15后的值作为索引去查建立好的表,就可以找到对应的元素。 这个表怎么建立呢? 可以通过数组的形式来定义。 发现终于出结果了,但是是反着的,想要正过来,可以通过StringBuffer 的reverse功能来完成。但是这个工具还没学到。 所以可以使用已经学过的容器:数组。*/public static void toHex1(int num){char[] table = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};char[] arr = new char[8];int pos =arr.length-1;while(num !=0){int temp = num & 15;arr[pos--] = table[temp];num = num >>> 4;}for(int x=pos+1;x<arr.length;x++){System.out.print(arr[x]);}}public static void toBin1(int num){int[] table = {0,1};int[] arr = new int[32];int pos = arr.length-1;while(num !=0){int temp = num & 1;arr[pos--] = table[temp];num = num >>> 1;}for(int x=pos+1;x<arr.length;x++){System.out.print(arr[x]);}System.out.println();}}
数组中的数组
System.out.println(arr.length); //打印的是二维数组的长度
System.out.println(arr[0].length); //打印的是二维数组中第一个一维数组的长度。
二维数组的其它表达方式:
int[][] arr = {{3,4,5},{2,3,4,5,},{3,4,5,6}};
int arr[][];
int [] arr[];
int[] x,y[]; //这个其实就相当于:int[] x 和 int[]y[] ,x是一维数组,y是二维数组。
- 黑马程序员_Java函数和数组
- 黑马程序员_java基础_函数&数组
- 黑马程序员_JAVA基础-函数与数组
- 黑马程序员_Java数组
- 黑马程序员_java数组
- 黑马程序员_java 数组
- 黑马程序员_java函数特点和应用
- 黑马程序员_Java语句和函数
- 黑马程序员_java函数
- 黑马程序员_JAVA:函数
- 黑马程序员_java初级基础知识汇总(常量和变量、语句、函数、数组)
- 黑马程序员_java基础二(语句,函数method和数组Array)
- 黑马程序员_Java基础2_(语句、函数method和数组Array)
- 黑马程序员_Java基础(流程控制、函数、数组)
- 黑马程序员_java编程基础第3天函数 数组
- 黑马程序员_java语法基础【3】(函数、数组)
- 黑马程序员_Java基础语法之函数与数组
- 黑马程序员_Java基础_函数,数组,常用排序
- 大家好
- 关于四元数
- android反编译后value文件夹下个文件的作用解析
- linux下JBOSS安装
- IOS Table中Cell的重用reuse机制分析
- 黑马程序员_Java函数和数组
- Jquery实现倒计后可操作
- 判断两个矩形是否相交的4个方法
- view移除所有子视图
- struts2中<s:select>标签的使用
- 修改设置语言选项,删除 [Developer]Accented English或者增加其他自己喜欢的语种
- Remove Nth Node From End of List
- python实现360皮肤按钮控件示例
- 班级常规量化考核管理系统