数组的基本概念和基本用法
一.数组基本概念
1.1 什么是数组
数组是用来存储多个连续数据类型相同的数据
1.2 什么是数组元素
数组中的每个数据就是数组元素
1.3 什么是数组长度
数组的元素个数就是数组长度
数组的长度在为数组元素分配空间时就已经确定了大小
二.使用数组
2.1 使用数组分4步:
1. 定义数组
2. 为数组元素分配内存
3. 数组元素初始化
4.使用数组
例如:班级5个学生java成绩,求成绩平均分
import java.util.Scanner;
public class s {
public static void main(String[] args) {
//第一步:定义数组,数组的名称是score
int []score;//或者 int score[]
//第二步:为数组元素分空间
score = new int[5];
//第三步:元素初始化
Scanner scanner = new Scanner(System.in);
for (int i = 0; i
!引用老师所画的内存分配图
三.数组的数据结构(线性表)
- 线性表,全名为线性存储结构。使用线性表存储数据的方式可以这样理解,即“把所有数据用一根线儿串起来,再存储到物理空间中”。
四.数组的基本用法
4.1 求一组数据中的最大值,最小值
public class Example06 {
public static void main(String[] args) {
//定义一个数组并分配内存与初始化
int score[] = new int[]{67, 78, 65, 88, 79};
// 求最低分,最高分
int min = score[0];
int max=score[0];
for (int i = 0; i < score.length; i++) {
//循环判断
if (score[i] < min) {
min = score[i];
}
//循环判断
if (score[i]>max){
max = score[i];
}
}
//输出结果
System.out.println(min);
System.out.println(max);
}
}
4.2 求一组数据的和与平均值
public class Example07 {
public static void main(String[] args) {
//定义数组,并初始化数组和分配内存空间
int score[] = new int[]{67,78,65,88,79};
int sum = 0;
for (int i = 0; i
4.3 遍历数组,输出数组
4.3.1 普通遍历数组的方法
public class Example09 {
public static void main(String[] args) {
int score[] = new int[]{67,78,65,88,79};
for (int i = 0; i
4.3.2 增强for循环遍历数组
public class Example10 {
//增强for循环遍历数组
public static void main(String[] args) {
int score[] = new int[]{67, 78, 65, 88, 79};
for(int s :score){
System.out.println(s);
}
}
}
4.4排序
4.4.1冒泡排序
- 每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归
位,依次类推下去。如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n-1 趟操作。
- 而 “每一趟 ” 都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位
继续比较下面两个相邻的两个数大小关系,重复此步骤,直到最后一个还没归位的数。
import java.util.Scanner;
public class Example11 {
public static void main(String[] args) {
//冒泡排序法
Scanner s = new Scanner(System.in);
int score[] = new int[5];
for (int i = 0; i < 5; i++) {
System.out.println("请输入需要排序的" + (i + 1) + "个人的成绩;");
score[i] = s.nextInt();
}
long start =System.currentTimeMillis();
for (int i = 0; i < score.length - 1; i++) {
for (int j = 0; j < score.length - 1 - i; j++) {
if (score[j] > score[j + 1]) {
int m = score[j];
score[j] = score[j + 1];
score[j + 1] = m;
}
}
}
}
}
4.4.2 选择排序
(1)每次排序的时候都需要寻找第n小的数据,并且和array[n-1]发生交换
(2)等到n个数据都排序好,那么选择排序结束。
import java.util.Scanner;
public class Example12 {
public static void main(String[] args) {
//选择排序
Scanner s = new Scanner(System.in);
int score[] = new int[5];
for (int i = 0; i < score.length; i++) {
System.out.println("请输入第" + (i + 1) + "的成绩");
score[i] = s.nextInt();
}
for (int i = 0; i < score.length - 1; i++) {//每次循环都会找出最小的数
int minindex = i;//记录最小数的下标
int min = score[i];//记录最小数
for (int j =i+1; j < score.length; j++) {//每次循环都会找出最小的数
if (score[j]
4.4.3 插入排序
(1)首先对数组的前两个数据进行从小到大的排序。
(2)接着将第3个数据与排好序的两个数据比较,将第3个数据插入到合适的位置。
(3)然后,将第4个数据插入到已排好序的前3个数据中。
(4)不断重复上述过程,直到把最后一个数据插入合适的位置。最后,便完成了对原始数组从小到大的排序。
import java.util.Scanner;
public class Example13 {
public static void main(String[] args) {
//少量数据插入排序
Scanner s = new Scanner(System.in);
int score[]=new int[5];
for (int i = 0; i 0){
if (score[j]
4.5 二分查找
import java.util.Scanner;
public class Example14 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int score[] = new int[5];
for (int i = 0; i < score.length; i++) {
System.out.println("请输入第" + (i + 1) + "学生的成绩:");
score[i] = scanner.nextInt();
}
//插入排序
for (int i = 1; i < score.length; i++) {
int j = i;
while (j > 0) {
if (score[j] < score[j - 1]) {
int t = score[j];
score[j] = score[j - 1];
score[j - 1] = t;
j--;
} else {
break;
}
}
}
System.out.println("请输入你想要查的成绩获得排名:");
int n = scanner.nextInt();
int index = binarySearch(score, n);
if (index == -1) {
System.out.println("没有找到相应的成绩排名:" + index);
} else {
System.out.println("找到了相应成绩的排名:" + (index + 1));
}
//遍历输出所有人成绩
for (int i = 0; i < score.length; i++) {
System.out.print(score[i]);
System.out.print(" ");
}
}
// 二分查找
public static int binarySearch(int[] scrArray, int n ) {
int first = 0;
int last = scrArray.length - 1;
while (first <= last) {
int middle = (first + last) >>> 1;
if (n == scrArray[middle]) {
return middle;
} else if (n > scrArray[middle]) {
first = middle + 1;
} else {
last = middle - 1;
}
}
return -1;
}
}
4.6 系统提供的Arrays类
4.6.1 比较数组是否相同
public static void main(String[] args) {
//Arrays 应用类 比较数组是否相同
int arr1[] = new int[]{56,12,15,46,84,75,56};
int arr2[] = new int[]{56,12,15,46,84,75,56};
int arr3[] = new int[]{56,12,15,46,84};
System.out.println(Arrays.equals(arr1,arr2));
System.out.println(Arrays.equals(arr1,arr3));
}
4.6.2数组排序
public static void main(String[] args) {
//Arrays 应用类 数组内元素升序排列 并以数组形式输出
int arr1[] = new int[]{56,12,15,46,84,75,56};
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1));
}
4.6.3 充满数组
//Arrays 应用类 充满数组
public static void main(String[] args) {
int arr1[] = new int[9];
Arrays.fill(arr1,20);
System.out.println(Arrays.toString(arr1));
}
4.6.4 生成新数组,并设置新长度
public static void main(String[] args) {
// Arrays 应用类 复制并生成新的长度的数组
int arr1[] = new int[]{56,12,15,46,84,75};
int arr2[] = Arrays.copyOf(arr1,15);
System.out.println(Arrays.toString(arr2));
}
4.6.5 在数组中查找并返回下标
public static void main(String[] args) {
//Arrays 应用类 在数组中查找 并返回下标
int arr1[] = new int[]{56,12,15,46,84,75,56};
Arrays.sort(arr1);
System.out.println(Arrays.binarySearch(arr1,12));
System.out.println(Arrays.binarySearch(arr1,15));
System.out.println(Arrays.binarySearch(arr1,50));
System.out.println(Arrays.binarySearch(arr1,60));
}
4.6.6以数组形式输出数组
import java.util.Arrays;
public class Example09 {
public static void main(String[] args) {
int score[] = new int[]{67,78,65,88,79};
System.out.println(Arrays.toString(score));
}
}
共有 0 条评论