1.求数组元素的最大值、最小值、平均数、总和等 -->只对数字类型有效
核心思想
通过定义一个变量在循环中循环赋值,然后在操作这个变量就行。
最大值
int a =0;
int[] arr = new int[]{1,5,3,6,7};
for(int i = 0;i < arr.length;i++){
if(arr[i] > a){
a = arr[i];
}
}
最小值
int a =0;
int[] arr = new int[]{1,5,3,6,7};
for(int i = 0;i < arr.length;i++){
if(arr[i] > a){
a = arr[i];
}
}
计算总和
int a = 0;
int[] arr = new int[]{1,3,4,6,7,3,9};
for(int i = 0;i < arr.length;i++){
a+=arr[i];
}
计算平均值
int a = 0;
int[] arr = new int[]{1,3,4,6,7,3,9};
for(int i = 0;i < arr.length;i++){
a+=arr[i];
}
int avg = a/arr.length;
2.数组的复制、反转、查找(线性查找、二分法查找)
数组的复制
int[] a = new int[] { 1, 5, 3, 4, 5 };
int[] b = new int[a.length];
//便利数组a
System.out.println("便利a数组的值:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println("");
//将数组a的值复制个数组b,并做简单修改
for (int i = 0; i < a.length; i++) {
b[i] = a[i];
if (i % 2 == 0) {
b[i] = i;
}
}
//便利数组b
System.out.println("便利b数组的值:");
for (int i = 0; i < b.length; i++) {
System.out.print(b[i]+" ");
}
System.out.println("");
//二次便利数组a,检查是否复制成功
System.out.println("二次便利a数组的值:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println("");
反转
思路:通过一个临时变量来暂时存放一个值,将首位互换,最后将临时值付给尾
String[] array = new String[] { "aa", "bb", "cc", "dd" };
System.out.println("第一次便利:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
// 反转方法一
// for (int i = 0, j = array.length - 1; i < j; i++, j--) {
// String a = "";
// a = array[i];
// array[i] = array[j];
// array[j] = a;
// }
// 反转方法二
for (int i = 0; i < array.length / 2; i++) {
String a = "";
a = array[i];
array[i] = array[array.length - i - 1];
array[array.length - i - 1] = a;
}
System.out.println("第二次便利:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
线性查找
思路:循环便利数组与要查找的值进行比较。如果相等返回下标,不相等给与说明。(不需要排序)
String[] array = new String[]{“aa”,”bb”,”cc”,”dd”,”ee”};
String value = “cc”;
for(int i = 0; i < array.length; i++;){
if(array[i].equals(value)){
System.out.println(“已找到,下标为:” + i + ”);
break;
}
if(i == array.length){
System.out.println(“未找到”);
}
}
二分法查找
//二分法查找:要求此数组必须是有序的。
int[] arr3 = new int[]{-99,-54,-2,0,2,33,43,256,999};
boolean isFlag = true;
// int number = 256;
int number = 25;
int head = 0;//首索引位置
int end = arr3.length - 1;//尾索引位置
while(head <= end){
int middle = (head + end) / 2;
if(arr3[middle] == number){
System.out.println("找到指定的元素,索引为:" + middle);
isFlag = false;
break;
}else if(arr3[middle] > number){
end = middle - 1;
}else{//arr3[middle] < number
head = middle + 1;
}
}
if(isFlag){
System.out.println("未找打指定的元素");
}
3.数组元素的排序
冒泡排序
思路:通过双重循环,外层循环控制循环多少次。内存循环用来比较相邻俩个值得大小,将大的值放到一边,每次将大的值放到一边后就不需要再比较了,在下次比较时-i,依次类推
int[] array = new int[]{1,5,8,-3,6};
for(int i = 0;i < array.length - 1; i++){//外层控制循环次数
for(int j = 0;j < array.length - 1 - i;j++){//内存控制比较次数,-i的作用:已经到位的值就不许要在比较了
if(array[j] < array[j + 1]){//比较俩个相邻值得大小
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
//便利
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
选择排序
int[] array = new int[]{1,5,8,-3,6};
for (int i = 0; i < arr.length - 1; i++) {//外层控制循环次数
int index = i;//记录下标
for (int j = i + 1; j < arr.length; j++) {////内层控制比较次数,-i的作用:已经到位的值就不许要在比较了
if (arr[j] < arr[index]) {//比较获取最小值得小标
index = j;
}
}
if (index != i) {//如果最小下标和i相等就表示没有变化
int tmp = arr[i];
arr[i] = arr[index];
arr[index] = tmp;
}
}
//便利
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
Arrays工具类的使用
方法 |
事例 |
解释 |
boolean equals(int[] a,int[] b) |
Arrays.equals(数组1,数组2); |
比较俩个数组是否相等。 一系列重载的方法。 |
String toString(int[] a) |
Arrays.toString(数组名); |
输出数组信息。 一系列重载的方法。 |
void fill(int[] a,int val) |
Arrays.fill(数组名,替换值); |
将指定值填充到数组之中。 一系列重载的方法。 |
void sort(int[] a) |
Arrays.sort(数组名); |
对数组进行升序排序,底层是快速排序。 一系列重载的方法。 |
int binarySearch(int[] a,int key) |
Arrays.binarySearch(数组名,查询值) |
对排序后的数组进行二分法检索指定的值。 |