------- 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.格式(1)int[][]arr = new int[3][2];:定义了名称为arr的二维数组,二维数组中有3个一位数组,每个一维数组中有2个元素。
格式(2)int[][]arr = new int[3][];:二维数组中有3个一维数组,每个一维数组都是默认初始化值null。
格式(3)int[][] 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培训、期待与您交流! ----------