一、 函数
1、 定义:
2、 函数就是定义在类中的具有特定功能的一段独立的小程序,也称为方法。
3、 函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数)
{
执行语句;
Return 返回值;
}
返回值类型:函数运行的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是变量,用于存储调用函数传递给函数的实际参数。
4、 函数的特点:
(1)定义函数可以将功能代码进行封装
(2)便于对该功能进行复用
(3)函数只有被调用才会被执行
(4)函数的出现提高了代码的复用性
(5)对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
4、注意:
(1)函数中只能调用函数,不能定义函数。
(2)定义函数时,函数的结果应该返回给调用者,交由调用者处理。
5、重载:
(1) 重载的概念:
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
(2)重载的特点:与返回值类型无关,只看参数列表。
(3)重载的好处:方便于阅读,优化程序设计。
(4)什么时候用重载?
当定义的功能相同,但参与运算的未知内容不同,那么这时就定义一个函数名称以表示其功能,
方便阅读,而通过参数列表的不同来区分多个同名函数。
二、 数组
1、 数组的定义:
(1) 概念:同一种数据的集合,其实数组就是一个容器。
(2) 数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式:
格式1:元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[7];
格式2:元素类型[] 数组名 = new 元素类型[]{元素,元素......};
示例:int[] arr = new int[]{3,6,7,9};
int[] arr = {3,7,5,9};
2、 内存结构:
java在启动时,在内存中划分了五个区域,每个区域都有特定的处理数据方式和内存管理方式。
(1)栈内存
用于存储局部变量,当数据使用完,所占空间会自动释放。
(2)堆内存
数组和对象,通过new建立的实例都存放在堆内存中
每一个实体都有内存地址值(即存放位置)
实体中的变量都有默认初始化值(实体是用来封装数据的)
实体不再被使用,会在不确定的时间内被垃圾回收器回收
(3)方法区
(4)本地方法区
(5)寄存器
3、数组的常见操作:
(1)遍历:
int[] arr = {4,8,7,9};
for(int x=0;x<arr.length;x++)
{
System.out.println("arr[" + x + "]=" + arr[x] + ",");
}
(2)求最大值:
给定一个数组{5,1,6,4,2,8,9};
获取粗数组中的最大值,以及最小值
步骤:
1、定义变量,初始化为数组中任意一个元素即可。
2、通过循环语句对数组进行遍历。
3、在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量
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;
}
(3)排序:
冒泡排序:
public class arry_Test3 {
public static void bubbleSort(int[] arr)
{
for(int x=0; x<arr.length; x++)
{
for(int y=0; y<arr.length-x-1; y++)//让每一次比较的元素减少,—1,避免角标越界。
{
if(arr[y]<arr[y+1])
{
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
public static void main(String[] args)
{
int[] arr={8,5,9,3,2,6,1};
printArry(arr);//排序前
bubbleSort(arr);
printArry(arr);//排序后
}
public static void printArry(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]+"]");
}
}
}
折半查找
public class arry6 {
public static int halfSearch(int[] a, int key)
{
int min =0,max = a.length-1,mid;
while(min<=max)
{
mid = (max+min)>>1;
if(key>a[mid])
min = mid + 1;
else if (key<a[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
public static void main(String[] args)
{
int[] arr={1,4,7,8,10,18,19};
int index=halfSearch(arr,18);
System.out.print("index="+index);
}
}
(4)进制转换:
十进制--->二进制
public static void toBin(int num)
{
while(num>0)
{
System.out.println(num % 2);
num = num/2;
}
}
十进制--->十六进制
public static void toHex(int num)
{
for(int x=0;x<8;x++)
{
int temp = num&15;
if(temp>9)
System.out.println((char)(temp-10+'A'));
else
System.out.println(temp);
num = num >>> 4;
}
}
4、二维数组:
(1)格式1:int[][] arr = new int[3][2];
二维数组中有3个一维数组,每个数组中有2个元素。
给第一个一维数组1角标位赋值:arr[0][1] = 78;
(2)格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组,每个一维数组都是默认初始化值null,
对这三个一维数组分别进行初始化:
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
(3)关于二维数组相关面试题:
有一个数组定义:int[] x,y []; 请选择下面哪个选项是正确的( )
a) x[0] = y; b) y[0] = x; c) y[0][0] = y; d) x[0][0] = y; e)y[0][0] = x[0]; f) x = y;
回答:int[] x,y [];定义的是X是一维数组,Y是二维数组所以c是对的。