解决数组常用方法

数组操作常见的问题:

java.lang.ArrayIndexOutOfBoundsException: 5 :数组越界异常

原因:找不到一个为5的索引。

java.lang.NullPointerException:空指针异常

原因:该数组肯定已经不再指向堆内存,或者访问了一个为空的数组。

1.获取数组的最大值

分析:

a.定义一个数组

b.从数组中任意找一个元素作为参照物,我们选择第一个元素,默认他是最大的

c.然后遍历该数组的所有元素,每遍历一次,我就和参照物进行对比

d.如果大于参照物,就取代参照物,否则不用管

e.然后一直到最后,参照物的值就是最大值

代码:

public static int ArrayMax(int[] arr) {

//默认找第一个元素作为参照物(假设最大值)

int max = arr[0];

//遍历所有元素

for (int i = 0; i < arr.length; i++) {

//每遍历一次,我就和参照物进行对比

if(arr[i] > max) {

//替换参照物

max= arr[i];

}

}

return max;

}

2.将元素逆序

分析:

a.定义一个数组

b.思路:

把数组索引为0的和数组索引为arr.length-1的数据进行交换

把数组索引为1的和数组索引为arr.length-2的数据进行交换

我们交换的次数arr.length/2

代码:

public static void main(String[] args) {

int [] arr=new int[] {1,2,5,7,9,3};

System.out.println("逆序前:"+Arrays.toString(arr));

for (int i =0; i < arr.length/2; i++) {//因为逆序只需要查找一半 所以;arr.length/2

//将第一个数和最后一个数进行交换 依次类推

//将第一个数存在临时变量

int temp = arr[i];

//将最后一个数赋值给第一个数

arr[i] = arr[arr.length-i-1];

//将会临时变量的数(第一个数)赋值给最后一个数

arr[arr.length-i-1] = temp;

}

System.out.println("逆序后:"+Arrays.toString(arr));

}

3.数组元素查找,查找该元素在数组中第一次出现的索引编号是多少

代码:

for (int i = 0; i < arr.length; i++) {

if(932 == arr[i]) {

System.out.println("第"+i+"个索引号");

}

}

4.将数组中的重复元素进行清除(去重),并且把非重复的元素存入到一个新数组并返回,而且不能浪费长度

代码:

public static void main(String[] args) {

int [] oldArr = {15,56,151,515,518,588,58,18,18,18,18,8,85,18,28,15};

//记录有多少个重复元素

int count = 0;

//计算重复元素的个数 oldArr.length-1是不计算后面的最后一次循环,提高效率(最重要的,防止数组越界)

for (int i = 0; i < oldArr.length-1; i++) {

for (int j = i+1; j < oldArr.length; j++) {

if(oldArr[i] == oldArr[j]) {

count++;

break;

}

}

}

//创建一个新的数组

int [] newArray = new int[oldArr.length-count];

int index = 0;

for (int i = 0; i < oldArr.length; i++) {

boolean flag = false;//该标识是用于识别取出的元素是否存在新的数组当中,false表示不存在

int temp = oldArr[i]; //从旧的数组当中取出所遍历的元素

for (int j = 0; j < newArray.length; j++) {

if(newArray[j] == temp) {

flag = true;

break;

}

}

//如果该元素不在新数组当中,存起来

if(flag == false) {

newArray[index++] = temp;

}

}

System.out.println(Arrays.toString(oldArr)+"---"+newArray.length);

System.out.println(Arrays.toString(newArray)+"---"+newArray.length);

}

}

5.Java冒泡排序算法

代码:

public static void main(String[] args) {

int []arr = {15,156,51,5658,218,18,18,18,8};

System.out.println("排序前"+Arrays.toString(arr));

//外层

// arr.length-1 是为了防止数组越界

// arr.length-1-i 为了减少比较的次数

for(int x = 0;x < arr.length-1;x++) {

for (int i = 0; i < arr.length-1-x; i++) {

if(arr[i] < arr[i+1]) {

//相比较的数,如果符合条件进行交换

int temp = arr[i];

arr[i] = arr[i+1];

arr[i+1] = temp;

}

}

}

System.out.println("结果3:"+Arrays.toString(arr));

}

}

5.数组工具类使用

public static void main(String[] args) {

int [] arr = {15,561,81,15186,568,1861,61,5,14};

//数组工具类之数组打印

//public static String toString(int[]a);

String str = Arrays.toString(arr);

System.out.println(str);

//数组工具类之数组排序

//public static void sort(int[]a);

Arrays.sort(arr);

System.out.println(Arrays.toString(arr));

}

6. 二维数组:就是其元素为一维数组的数组

格式:

数据类型[][] 数组名 = new int[m][n];

m:表示这个二维数组里面有多少个一维数组

n:表示每一个一维数组里面有多少个元素值

注意:

1.以下格式也能够定义二维数组:

a.数据类型 数组名[][] = new 数据类型[m][n];

b.数据类型[]数组名[] = new 数据类型[m][n];

2.注意以下格式:

int [] x;//√

int [] y [];//√

int []x,y[];//√

格式2:

int [][] arr = new int [m][];

m:表示这个二维数组里面有m个一维数组

但是没有给出每个一维数组里面有多少个元素(没有为一维数组分配空间)

二维数组的静态初始:

基本格式:

数据类型[][] 数组名 = new 数据类型[][]{{元素1},{元素1,元素2},{元素1,元素2}};

简化格式:

数据类型[][] 数组名 = {{元素1},{元素1,元素2},{元素1,元素2}};

举例:

//错误写法 不要静态和动态混合

int [][] arr = new int [4][5]{{元素1},{元素1,元素2},{元素1,元素2}};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值