数组的常用操作
查:
查询数组里的某个元素
很简单,System.out.println(nums[3]);
遍历数组:按照元素在数组中的顺序,依次输出所有的元素
for(int i=0;i<nums.length;i++){
System.out.print(nums[i]);
}
找出数组中的最大(小)值
以找最大值为例
思路
①假设数组中的第一个元素的最大值
②依次取出后面的元素与假设的最大值进行比较,如果后面的元素比假设的最大值大,取代它成为新的最大值,如果比假设的最大值小,不进行替换,继续向后比较
③一直比较到最后一个元素,就可以获得数组中的最大值
例:输出五位同学的分数,并输出最高分数
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double[] scores = new double[5];
double max = scores[0];
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第" + (i + 1) + "位同学的分数");
scores[i] = sc.nextDouble();
if (scores[i] > max) {
max = scores[i];
}
}
System.out.println("最高分为" + max);
}
增:
①新建一个比原来数组长度大1的数组(长度按照插入的数据个数定)
②将原来数组里的元素按照顺序,存储到新的数组中
③使用Scanner获取要增加的数据
④通过循环比较获取要插入的位置
⑤从插入位置开始及之后的元素依次往后移动
必须是后面的元素先往后移前面的才往后移
比方说原来的数组i下标为4,新的数组j的下标就为5,J[5]在赋值的时候没有参与,所以它是默认的数值0,所以这里就是先从j[4]最先开始向后移,然后前面的依次向后移。
例:有一组学员的成绩{99,85,82,63, 60},将它们按降序排列。要增加一个学员的成绩,将它插入成绩序列,并保持降序
int[] scores = { 99, 85, 82, 63, 60 };
// 1)新建一个比原来数组长度大1的数组
int[] newscores = new int[scores.length + 1];
// 2)将原来数组里的元素按照顺序,存储到新的数组中
for (int i = 0; i < scores.length; i++) {
newscores[i] = scores[i];
}
//3)使用Scanner获取要增加的学员的成绩
Scanner sc = new Scanner(System.in);
System.out.println("请输入增加的学员的成绩:");
int add = sc.nextInt();
// 4)通过循环比较获取要插入的位置
int index = newscores.length-1;//如果是index=0的话;就说明默认是放在第一位的,此时输入一个小于0的数,该数没有进入判断,index就默认是0,会出现在第一个,所以把它的默认位置设为最后一个
for (int i = 0; i < newscores.length; i++) {
if (add > newscores[i]) {
index = i;
//一旦获取插入元素比某一个元素大,就不在往后进行比较了,结束整个比较过程
break;
}
}
//5)从插入位置开始及之后的元素依次往后移动
for (int i = newscores.length - 1; i > index; i--) {
newscores[i]=newscores[i-1];
}
newscores[index]=add;
for(int i=0;i<newscores.length;i++){
System.out.print(newscores[i]+" ");
}
注意这一行代码,规定的是index的默认位置,这里一开始写的是0,这样的话如果输入的是一个负数,由于最后一个元素默认是0,负数小于0,也就是没有进入if循环,这样的话idenx就没有重新赋值,index默认是0,这样的话就会在新的数组中成为下标为0的元素,所以就要把index的初始值设为newscores.length-1(不能是newscores.length这样的话会出现数组越界异常)
删:
删除指定位置的元素
从删除位置之后的元素依次往前移动一位,最后一位元素值赋予对应类型的初始值
最后一位元素值赋予对应类型的初始值,只有当删除位置处于0-6之间的时候删除元素才会操作
// 删除数组里的元素
int[] nums = { 11, 22, 45, 35, 88, 78, 99 };
System.out.print("删除元素之前的数组");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
System.out.println();
// 删除指定位置的元素
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要删除的元素位置(0-6)");
int index = sc.nextInt();
// 从删除位置之后的元素依次往前移动一位,最后一位元素值赋予对应类型的初始值
for (int i = index; i < nums.length - 1; i++) {
nums[i] = nums[i + 1];
}
// 最后一位元素值赋予对应类型的初始值,只有当删除位置处于0-6之间的时候删除元素才会操作
if (index >= 0 && index < 7) {
nums[nums.length - 1] = 0;
}
System.out.print("删除元素之后的数组");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
冒泡排序
每次比较相邻两数,小的交换到前面,每轮结束后最大的数交换到最后
如这样的一个数组[11,5,80,25,62],可以发现第一轮,比较了4次,第二轮,比较了3次,第三轮,比较了2次,第四轮:比较了1次
这样就可以想到之前使用双重循环结构输出图形,外层循环控制行,内层循环控制列。在这里面是外层循环控制比较轮数,内层循环控制比较次数。
for (int i = 0; i < num.length; i++) {
for (int j = 1; j < num.length-i; j++) {
if(num[j]>num[j-1]){
int temp=num[j];
num[j]=num[j-1];
num[j-1]=temp;
}
}
}
Arrays类
使用java.util.Arrays类
boolean equals(array1,array2)------比较array1和array2两个数组是否相等
sort(array)------对数组array的元素进行升序排列
String toString(array)------将一个数组array转换成一个字符串
void fill(array,val)------把数组array所有的元素都赋值为val
copyOf(array,length)---把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致
int binarySearch(array,val)----查询元素值val在数组array中的下标(要求数组中元素已经按升序排列)
// Arrays类里常用的方法
//boolean equals(array1,array2):比较两个数组是否相同,如果相同返回true,不相同返回false
int[] i={11,22};
int[] j={22,11};
boolean result=Arrays.equals(i, j);
System.out.println(result);
//String Arrays=String toString(array):将数组转换成字符串
int[] k={11,22};
String str=Arrays.toString(k);
System.out.println(str);
System.out.println(Arrays.toString(k));
//void fill(array,val):将数组里的所有元素的值替换成指定val值
int[] l ={11,22,33};
System.out.println(Arrays.toString(l));
Arrays.fill(l, 77);
System.out.println(Arrays.toString(l));
//copyOf(array,length):把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致
int[] p = {11,12,13};
int[] p1=Arrays.copyOf(p,p.length+1);
System.out.println(Arrays.toString(p1));
//int binarySearch(array, val):查询元素值val在数组array中的下标(要求数组中元素已经按升序排列)
int[] o={11,22,33,44,55};
int x= Arrays.binarySearch(o,44);
System.out.println("下标是:"+x);