示其功能,方便阅读,而通过参数列表的不同来确定使用哪一个同名函数。
四,数组
数组:同一类型数据的集合。数组其实就是一个容器。
(一)、一维数组
1,定义格式:
元素数据类型[ ] 数组名称 = new 元素数据类型 [ 元素个数或者数组长度 ]
例如: int[ ] arr = new int[4];
元素数据类型[ ] 数组名称 = new 元素数据类型[ ]{元素1,元素2,元素3..........}
例如: int[ ] arr = new int[ ]{3,4,5,6,623,33}
元素数据类型[ ] 数组名称 ={元素1,元素2,元素3..........}
例如: int[ ] arr = {2,3,4,5,6,}
2,数组在初始化或者使用的过程在中容易出现两个异常
ArrayIndexOutOfBoundsException 数组下标越界异常 通常是使用了不存在的数组索引造成的
NullPointerException 空指针异常 通常是由于使用了未被初始化的数组造成的
(二)、二维数组
二维数组就是在数组中定义数组。在二维数组中,里面的小一维数组的长度是可以不同的。
1,定义方法。例如:定义一个二维数组,这个二维数组中有3个一维数组,每个一维数组中有四个int类型的元素。
int[ ][ ] arr = new int[3 ][4 ];
2,一些问题
A,定义int[ ][ ] arr = new int[3 ][4 ];
那么执行下面打印语句的结果是:
System.out.println(arr);//打印的结果是二维数组的地址值
System.out.println(arr[0]);//打印的结果是二维数组中第一个一维数组的地址值。
System.out.println(arr.length);//3。 打印的是二维数组中元素个数,即有一个一维数组
System.out.println(arr[0].length);//4 打印的是二维数组中第一个一维数组有几个元素
B,定义int[ ][ ] arr = new int[3 ][ ],上面的这个二维数组,仅仅指定了里面包含几个小数组,没有制定小数组中有几个元素。执行下面两个打印语句的结果是:
System.out.println(arr);//打印的结果是二维数组的地址值
System.out.println(arr[0]);//打印的结果是null。因为里面的一维数组未被初始化。
C,定义下面两个数组定义int[ ][ ] arr = new int[3 ][4 ],定义int[ ][ ] arr1 = new int[3 ][ ],则下面的打印结果为
System.out.println(arr[0][0]);//结果是0 因为数组存放在堆内存中,对内存中的变量都有默认初始化值。int类型为0,引用类型为null,布尔类型为false
System.out.println(arr1[0][0]);//会跑出空指针异常,因为第一个小数组没有被初始化,她的地址值为null。
五、其他一些知识点
1,冒泡排序
思路:冒泡排序每轮排序都是相邻元素之间进行比较,每轮结束后会产生一个元素在其最终位置上。每轮排序结束后,下一轮比较都会减少一个元素。代码如下:
public static void bubbleSort(int[] arr)
{
for(int i = 0; i < arr.length; i++)
for(int j = 0; j < arr.length-i-1; j++)
{
if(arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
2,选择排序
选择排序每次都是找一个固定的元素和其他元素相比,每次排序完成后,都会产生一个在最终位置的元素,则接下来的排序就会一个元素
public static void selectSort(int[] arr)
{
for(int i = 0; i < arr.length; i++)
for(int j = 0; j < arr.length; j++)
{
if(arr[i] < arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
3,二分查找
二分查找的数组必须是有序的,即数组元素从大到小排列。当给出一个元素key,查看其是否在数组中,如果存在返回她的下标,否则返回-1;
public static int halfSearch(int[] arr,int key)
{
int min = 0,max = arr.length,mid;
mid = (min+max)/2;
while(arr[mid] != key || min < max)
{
if(key > arr[mid])
{
min = mid + 1;
mid = (min + max)/2;
}
else if(key < arr[mid])
{
max = mid - 1;
mid = (min + max)/2;
}
else
return mid;
}
return -1;
}
4,十进制转任意进制的数据
十进制数据(包括负数)转换为任意进制的数据,其中需要三个参数,num是被转换的十进制数据,base是转换的基数,offset是在转换的过程中需要右移的位数。代码如下:
public static void trans(int num ,int base, int offset)
{
if(num == 0) //如果要转换的数值是0,则直接返回
{
System.out.println(0);
return;
}
StringBuilder sb = new StringBuilder();// 定义一个StringBuilder容器,用来存放数据,主要使 //用其reverse方法
char[] chs = new char[]{‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,
‘7‘,‘8‘,‘9‘,‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘}; //通过查表法更简单的找到相&之后的数据
while(num!=0)
{
int temp = num & base;
sb.append(chs[temp]);
num = num >>> offset;
}
System.out.println(sb.reverse());
}