1.二分查找
public class BinarySearchDemo {
public static void main(String[] args) {
int[] array=new int[]{1,23,45,56,43,56,34,7,34,256,65,23,65686,32,46};
//排序数组
Arrays.sort(array);
System.out.println(Arrays.toString(array));
Scanner scanner=new Scanner(System.in);
System.out.println("请输入要查找的数:");
int num=scanner.nextInt();
//定义最小下标和最大下标
int minIndex=0;
int maxIndex=array.length-1;
while (minIndex<=maxIndex){
//中间下标
int middleIndex=(minIndex+maxIndex)/2;
//寻找的值等于中间下标的值
if(num==array[middleIndex]){
System.out.println("已找到,下标是:"+middleIndex);
return;
}else
//寻找的值小于中间下标的值
if(num<array[middleIndex]){
maxIndex=middleIndex-1;
}else
//寻找的值大于中间下标的值
if(num>array[middleIndex]){
minIndex=middleIndex+1;
}
}
System.out.println("数组中没有这个数");
scanner.close();
}
}
2.数组扩容的方法
public class ArrayExpand {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("数组需要扩容多少位:");
int n=scanner.nextInt();
int[] array=new int[]{1,3,6,9,434};
int[] array2=new int[array.length+n];
// 第一种方法 for循环
for(int i=0;i<array2.length;i++){
//旧数组的长度
if(i<array.length){
array2[i]=array[i];
}else if(i<array2.length){
if(i==array.length){
array2[i]=52;
}
}
}
//第二种方法 System.arraycopy();
System.arraycopy(array,0,array2,0,array.length);
/* 第一个参数: 原来的数组
第二个参数: 从原来数组的什么地方开始复制
第三个参数:新的数组
第四个参数:新的数组从第几位开始接收数据
第五个参数:新数组接收数据的长度 */
//第三种方法 Arrays.copyof()
int[] array3=Arrays.copyOf(array,array.length+n);
/* 第一个参数:原来的数组
第二个参数:新数组的长度*/
array=array2;
System.out.println(Arrays.toString(array));
scanner.close();
}
}
3.数组中的常见问题
1. ArrayIndexOutOfBoundsException
数组⻆标越界异常
访问了不存在的⻆标
2. NullPointerException
空指针异常----变量没有赋值
栈中的数组变量没有指向堆内存中的数组实体
4.多维数组
1.声明方式
int[][] array;
int array[][];
int[] array[];
2.初始化
2.1 动态初始化
//初始化数组为两个数组元 素,每个数组元素有3个元素,确定长度,不确定具体元素
array=new int[2][3];
//初始化数组,确定外层数组里面的数组元素的个数,不确定内层元素的长度
array=new int[2][];
2.2 静态初始化
//使用具体数组元素初始化,长度由java自己确定
array=new int[][]{
{1,2,3},
{2,4,6},
{1,4,7}
}
//使用具体数组元素初始化,长度由java自己确定,array需要是已经初始化之后的数组
array={
{1,2,3},
{2,4,6},
{1,4,7}
}
5.多维数组的赋值
1.对多维数组的赋值
int[][] array=new int[3][2];
array[0]=new int[2];
array[1]=new int[]{1,2};
int array1={1,3,5,7,8};
array[2]=array1;
6.多维数组的遍历
public class MuliArrayDemo {
public static void main(String[] args) {
int[][] array=new int[3][3];
//遍历外层数组
for(int i=0;i<array.length;i++){
//遍历内部数组,将第i个数组元素引用赋值给temp
int[] temp=array[i];
//调用当前为i 的数组元素
for(int j=0;j<temp.length;j++){
System.out.print(temp[i]+"\t");
}
}
}
}
7.方法参数
1.形参--形式参数,仅仅是一个抽象的代表,表示被方法操作的参数
2.实参--实际参数,真实参与方法的运算
*形参只表示参数,没有真实的值,实参是真实的值