数组
数组中常见的错误: 1.NullPointerExcepation : 空指针异常 原因:引用的类型变量没有指向任何的对象,在这种情况下还访问了它的属性和方法。
一个对象如果使用完了不会立马释放,只是将这个对象变为一个垃圾对象,由 垃圾回收机制自己来释放。,我们没办法操作它释放。 2.ArrayIndexOutOfBoundsExcepation :数组下表越界
//创建一个int类型的数组
//arr : 是一个变量 只是数组的一个引用地址
//局部变量存在栈中
//成员变量 -- 属性 --- > 对堆区中
//静态变量 --- > 共享区域
java中数组一样存在多维 : 二维数组 ,三维数组
二维数组的定义 格式:
// 数据类型[][] 数组名 = new 数据类型[][];
想要接收二维数组中的元素 : 需要用一个一维数组来接收
/动态初始化
//数据类型[][] 数组名 = new 数据类型[][];
//注意 :前面中括号中数值指的是二维数组元素个数 , 后面一个是指二维数组 //中一维数组的元素个数。
//静态初始化 //数据类型[][] 数组名称 = {{元素1,..},{元素1,..},{元素1,..}};
//二维数组中的元素一定是一维数组。
/总结:数组的特点:
/* 1.数组中只能存同一种数据类型的数据。 2.数组他会给存入的元素默认分配一个索引值 ,索引从0开始。 3.数组一旦初始化,长度就固定了。 4.数组中元素的内存地址是连续的。
class Demo11 { public static void main(String[] args) { //定义一个int类型的数组 //数组的长度可以指定也可以不是定 int[] arr = new int[10]; //数组中添加元素 arr[0] = 1; arr[1] = 2; //如果元素没有被赋值 默认以0来填充。
//遍历数组 for(int i = 0 ; i <arr.length ;i++){ System.out.println(arr[i]); }
//-------------数组的初始化方式------------- //1.静态初始化 : 这个值给多少就是多少,不能过改变 int[] arr1 = {1,2,3,4,5,6}; //2.动态初始化 : 不可变的数组 可变数组--->集合 ArrayList int[] arr = new int[10];
//定义一个字符串数组 //默认为:null String[] strArr = new String[10];
} }
class Demo12 { public static void main(String[] args) { //需求:指定一个int类型的数组,给一定元素,将元素从小到大进行排序。 //初始化一个数组 int[] arr = {7,3,9,12,6,2}; //选择排序 : 效率太低比较的次数太多 for(int i = 0;i<arr.length;i++){ for(int j= 1 ; j<arr.length;j++){ if(arr[j-1]>arr[j]){ int temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp;
} } }
//遍历数组 for(int i=0;i<arr.length;i++){
System.out.println(arr[i]); }
} }
class Demo14 { public static void main(String[] args) { int num = 4; int[] arr ={1,2,3,4,5,6};
//需求:输入一个数,查找数组中是否右这个数 //遍历加判断 for(int i = 0;i < arr.length;i++){ if(num==arr[i]){ System.out.println("数组中存在这个值,索引为:"+i); } } } }
class Demo15 { public static void main(String[] args) { //二分法 : 前提 : 数组要排序好
int[] arr = {1,2,3,4,5,6}; int num = 5;
int max = arr.length-1; int min = 0; int mid = (max + min) / 2;
while(true){ if(num > arr[mid]){ min = mid +1;
}else if (num < arr[mid]) {
max = mid-1; }else { System.out.println("找到了:"+mid); break; }
//没有找到 if(min > max){ System.out.println("没有找到"); break; } //重新设置中间值 mid = (max + min)/2; }
} }
class Demo13 { public static void main(String[] args) { //需求:每次将数组中最大的元素把他移到最右边去 int[] arr = {7,3,9,12,6,2}; //将最大的值移到最右边 //面试经常考的 //------这中排序就是冒泡排序------------------- for(int i =0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){ int temp = arr[j]; arr[j]=arr[j+1]; arr[j+1] = temp; } } }
/* //将第二大的值移到倒数第二位 for(int i =0;i<arr.length-1-1;i++){ if(arr[i]>arr[i+1]){ int temp = arr[i]; arr[i]=arr[i+1]; arr[i+1] = temp;
} }
for(int i =0;i<arr.length-1-2;i++){ if(arr[i]>arr[i+1]){ int temp = arr[i]; arr[i]=arr[i+1]; arr[i+1] = temp;
} }
for(int i =0;i<arr.length-1-3;i++){ if(arr[i]>arr[i+1]){ int temp = arr[i]; arr[i]=arr[i+1]; arr[i+1] = temp;
} }
for(int i =0;i<arr.length-1-4;i++){ if(arr[i]>arr[i+1]){ int temp = arr[i]; arr[i]=arr[i+1]; arr[i+1] = temp;
} } */ //遍历数组 for(int j = 0 ; j<arr.length;j++){ System.out.println(arr[j]); } } }