-------android培训 、java培训、期待与您交流! ----------
1.函数
函数就是方法 方法就是函数发现以上的运算因为获取不同的数据的运算结果,代码出现了重复
位了提高代码的复用性,对代码进行抽取,将这个部分定义成一个独立的功能方便日后
使用 java中对功能的定义是通过函数的形式来体现的
格式 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,)
{
执行语句;
return 返回值;
}
注意
函数中只能调用函数 但是不能在函数中定义函数
2. 如何定义一个函数
1 )既然函数是一个独立的功能,那么该功能的运算结果是什么先明确。
2 )在明确在定义该功能的过程中是否需要未知的内容参与运算。
需求 定义一个功能完成3+4的运算,并将结果返回给调用者。
1)明确功能的结果 是一个正数的和
2)实现该功能的过程中是否有未知的内容参与运算 没有
这就是明确返回值的的类型
3)明确函数的参数列表(参数的类型和参数的个数。)
public static int getSum()
{
return 3+4;
}
这是一个最基本最简单的函数示例
定义功能的时候记着把结果返回调用者就行了 至于对这个结果进行任何的操作那是调用者的事儿不能在函数中进行
3. 重载在一个类中允许存在同一个函数,只要他们的参数个数或者参数类型不同即可
注意
什么时候用重载呢
当定义的功能相同时 但是参与运算的未知内容不同, 这是就定义一个函数名称以表示其功能方便阅读而通过参数列表的不同来区分多个同名函数
重载示例
public static void main(String[] args)
{
add(1,2);
add(1,2,3);
}
//定义一个加法运算,获取两个整数的和。
public static int add(int x,int y)
{
return x+y;
}
//定义一个加法,获取三个整数的和。
public static int add(int x,int y,int z)
{
return x+y+z;
}
上面的两个add函数虚拟机会根据不同的参数来自动选在调用哪个add
关于重载 有以下常见的问题十分值得注意
重载的时候注意参数类型 参数的顺序是有顺序的
主要是看参数的类型 参数的个数 参数的顺序
void show(int a,char b,double c){}
a.
void show(int x,char y,double z){}//没有,因为和原函数一样。
b.
int show(int a,double c,char b){}//重载,因为参数类型不同。注意:重载和返回值类型没关系。
c.
void show(int a,double c,char b){}//重载,因为参数类型不同。注意:重载和返回值类型没关系。
d.
boolean show(int c,char b){}//重载了,因为参数个数不同。
e.
void show(double c){}//重载了,因为参数个数不同。
f.
double show(int x,char y,double z){}//没有,这个函数不可以和给定函数同时存在与一个类中。
4. 数组 同一个数组中只能定义同一个类型的元素
局部变量都是在栈里面存 (for,函数中的等都是局部变量)
new出来的实体都在堆里面。
数组应用中常见的问题
布尔型数组的默认值是 false
ArrayIndexOutOfBoundException: 操作数组是,访问到了
数组中不存在的角标。
NullPointException 空指针异常 当引用没有任何指向值为null的情况该引用还在用于操作实体。
数组最常见的应用。
获取数组中的元素
获取数组中的元素通常用到遍历。
用length直接获取数组的长度(即元素个数)
在有数组的函数中通常会用到for循环(用完之后自动释放)
数组的常见操作
获取最值
获取数组中的最大值
思路
1 )获取最值需要进行比较,每一次比较都会有一个较大的值,因为该值不确定通过一个变量进行临时存储。
2) 让数组中的每一个元素都和这个变量中的值进行比较 如果大于了变量中的值 就用该变量记录较大的值。
3 )当所有的元素都比较完成 该变量中存储的就是数组中的最大值了。
步骤:
1) 定义一个变量 初始化为数组中的任意一个元素即可
2 )通过循环语句对数组元素进行遍历
3 )在遍历过程中定义判断条件。如果遍历到的元素比变量中的元素打就赋值给该变量;
需要定义一个功能来完成 以便提高复用性,
1 )明确结果, 数组中的最大元素 int型
2 )位置内容,一个数组 int[]
class getbig
{
public static void main(String[] args)
{
int[] arr ={5,2,6,3,4,1};
int max= getMax(arr);
System.out.println("Hello "+max);
}
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;
}
}
5. 排序
选择排序
内循环结束一次 最值出现在头角标位置上,选择排序方法如下
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])
{
//这个置换的功能可以单独拿出来做个方法 执行到这的时候调用即可
int temp = arr[x];
arr[x] = arr[y];
arr[y]= temp;
}
}
}
}
冒泡排序
相邻的两个元素进行比较,如果符合条件进行位置调换。
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])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
最快的还是希尔排序
面试常用的还是 冒泡和选择
在栈中交换元素要比在堆内交换元素消
耗的资源少
6.查找操作应注意的细节
数组的查找操作
最简单的过程就是在遍历的时候进行判断
没找到的时候返回
-1 (数组中没有-1这个角标 返回这个就表示没找到)
定义功能获取key 有重复元素 返回的是第一个匹配的元素
折半查找可以提高效率 但是必须要数组是有序的。
进制转换中 涉及有效位 可以利用指针标出来,打印的时候省去前面多余的 0
7. 关于数组还要说几条
往数组里面存元素 可以用指针
字符数组一旦定义完 默认初始化为空格
数组中的知识点
往数组里面存数组 把数组作为元素存入到数组中
二维数组的初始化方式
int[][] arr = new int[3][4]
这表示定义了名称问arr的维维数组,二维数组中有3个一维数组
每一个一维数组中有四个元素。
另一种方式 int[][] arr = new int[3][] 后面这个空不写
数组是引用数据类型 初始化的时候默认是空
一维数组定义
这种定义方式 int[] x,y[];表
示x是一维的y是二维的。(这种定义模式 实际编码的时候不用,有时会参加某些考试的时候可能会有这种形式)
关于一二维数组的性质可以靠如下的几个判断来掌握
判断如下正确性
a x[0]=y;//这是错的 这是把一个二维数组赋值给一个一维数组中的元素
b y[0]=x //这是对的 一维数组给一维
c y[0][0]=x//二维数组中的一个元素 不能赋值一个一维数组
d x[0][0]=y//x 就是不是二维数组
e y[0][0]=x[0]// 这个是对的
f x=y// 显然不对了