关于函数一些需要注意的事情
定义一个函数必须明确两个事情:
1.该函数的功能?也就是明确函数的返回值类型;
2.是否有未知数参与运算?也就是明确函数的参数;
其中,返回值类型和参数类型没有直接的关系;
下面,写一个例子:
编译运行:
函数重载
必须满足:
1.在同一个类中
2.函数名相同
3.参数个数、类型、顺序中有一个不一样就行
数组
数组就是同一种数据类型的集合,也就是一种容器,数组可以自动给数组中的元素从0进行编号;
内存划分
1.寄存器
2.本地方法区
3.方法区
4.栈
存储的都是局部变量,而且所属的作用域一旦结束,该变量自动释放;
5.堆
存储的是数组和对象,其实数组就是对象,凡是new出来的就放在堆中;
特点:
1.每一个实体都有首地址值;
2.堆内存中的每一个变量都有默认的初始化值,根据类型的不同而不同;
3垃圾回收机制
! 当引用型变量没有任何实体指向的时候,还在用其操作实体,就会发生空指针异常;
操作
对数组的最基本的操作就是存取,核心思想就是对角标的操作;
这是对数组操作中最常见的遍历:
运行结果:
获取数组中的最大值:
1.进行比较,并定义变量记录每次比较后较大的值
2.对数值中的元素进行遍历,和变量中记录的元素进行比较,如果大于就覆盖
3.遍历结果
定义一函数来实现:
明确一:结果,是数组中的元素,int
明确二:未知内容,数组
这是代码实现:
这是运行结果:
现在我把数组中的元素变一下,都化成负数,看能不能顺利的把-1挑出来:
结果非常让人惊讶!到底是哪里写的不对呢?在这里
这个用于比较的中间变量,不能说是变量了,都赋值了,跟常量没啥两样,之前全是正数的时候都比0大,当然可以顺利比较,可是负数的时候就不行了;
怎么改呢?第一必须要改成变量,其次要使得这个变量时被比较的那一堆数中的最小值;
或者再优化一下:
经过这两次的比较我们思考一下,我们都知道数组下表和元素是有对应关系的,那么把作为记录最值的变量初始化为0并不是完全不行;
这是选择排序:
先打印排序前的顺序:
然后加一句代码:
这就是排序后的结果:
这是冒泡排序:
还可以优化一下,因为元素之间比较的次数很多,而如果我们定义一个中间变量来存储每次比较后产生的最值就可以减少比较次数;
public static void last(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
int num=arr[x];
int index=x;
for(int y=x+1;y<arr.length;y++)
{
if(num>arr[y])
{
num=arr[y];
index=y;
}
}
if(index!=x)
{
swap(arr,x,index)
}
}
}
数组还有一个操作:查找
这是最基本的查找:
二分查找: