数组概述
Java和许多高级语言都提供了一种称作数据(array)的数据结构,可以用它来存储一个元素个数固定且元素类型下相同的有序集。
- 数组主要解决多变量多数据的存储问题,方便程序后期统一维护操作数据。
- 本质:数组就是一系列空间大小相等且地址连续的一片存储空间。
为什么空间大小是相等的呢?
- 就是为了方便统一维护我们的数据,必须得保证数据之间的类型
是一样的。为什么变量空间的地址是连续的呢?
- 地址连续切大小相等方便计算后续元素的具体物理内存地
址。
数组定义方式
- 创建数组只指定长度但不指定内容
数据类型[] 变量名称 = new 数据类型[长度];
- 创建数组指定内容(同时长度就确定了)
(1) : 数据类型[] 数组名 = new 数据类型[]{数据1, 数据2, 数据3, …, 数据n};
(2) : 数据类型[] 数组名 = {数据1, 数据2, 数据3, …, 数据n};
数组的使用
- 数组最值和平均值
import java.util.*;
public class Work1 {
public static void main(String[] args) {
double[] grades = new double[10];
double sum = 0;
double max = 0;
double min = 0;
double temp = 0;
Scanner sc = new Scanner(System.in);
for (int i = 0; i < grades.length; i++) {
System.out.print("请输入第"+(i+1)+"位同学的成绩:");
grades[i] = sc.nextDouble();
sum += grades[i];
if (i == 0) {
max = grades[0];
min = grades[0];
}else {
if (grades[i] > max) {
max = grades[i];
}
if (grades[i] < min) {
min = grades[i];
}
}
}
System.out.println("平均成绩为:" +(sum / grades.length));
System.out.println("最高成绩为:"+max);
System.out.println("最低成绩为:"+min);
}
}
- 判断一个数是否在数组中
import java.util.Scanner;
public class Work2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请您输入一个数,判断是否在数组里:");
double num = sc.nextInt();
System.out.println(getnum(num));
}
public static boolean getnum(double num) {
int[] num2 = {1, 3, 5, 8, 3, 46, 34, 46, 26, 48, };
for (int i = 0; i < num2.length; i++) {
if (num == num2[i]) {
return true;
}
}
return false;
}
}
- 数组排序
public class Work1 {
public static void main(String[] args) {
double[] grade = {46, 57, 66.7, 88, 47, 99, 67, 59, 54.5, 70};
//getsorts(grade);
//getsort(grade);
//getselect(grade);
getinsert(grade);
System.out.println("他们的成绩从低到高排序为:");
for (double i : grade) {
System.out.println(i);
}
}
//冒泡排序:大数上浮法
public static void getsort(double[] grade) {
for (int i = 0; i < grade.length-1; i++) {
for (int j = 0; j < grade.length-1-i; j++) {
if (grade[j] > grade[j+1]) {
swap(grade,j,j+1);
}
}
}
}
//小数下沉法
public static void getsorts(double[] grade) {
for (int i = 0; i < grade.length-1; i++) {
for (int j = grade.length-1; j > i; j--) {
if (grade[j] < grade[j-1]) {
swap(grade,j,j-1);
}
}
}
}
//选择排序
public static void getselect(double[] grade) {
for (int i = 0; i < grade.length-1; i++) {
int min = i;
for (int j = i; j < grade.length; j++) {
if (grade[min] > grade[j]) {
min = j;
}
}
if (min != i) {
swap(grade,min,i);
}
}
}
//插入排序
public static void getinsert(double[] grade) {
for (int i = 1; i < grade.length; i++) {
for (int j = i; j > 0 && grade[j] < grade[j-1]; j--) {
swap(grade,j,j-1);
}
}
}
private static void swap(double[] grade, int j, int i) {
grade[i] = grade[i] + grade[j];
grade[j] = grade[i] - grade[j];
grade[i] = grade[i] - grade[j];
}
}
二维数组
就是一个由行和列组成的一个表格(矩阵)
- 在这个矩阵中访问元素的话,是根据元素的行角标和列角标所确定的。
- 无论是二维数组,还是多维数组,它们本身就是一个一维数组。
- 尤其对于二维数组而言,无非就是一个一维数组,只不过该一维数组中的每一个元素是另一个一维数组罢了。
定义方式
1.创建一个n行n列的二维数组,元素默认都是0
数据类型[][] 变量名称 = new 数据类型[大小][大小];
2.创建个指定元素的二维数组
数据类型[][] 变量名称 = new 数据类型[][]{数据1, 数据2, 数据3,…}{数据1, 数据2, 数据3,…}…;
3.锯齿矩阵
二维数组使用
public static void main(String[] args) {
int [][] arr=new int[][]{{4,5,6},{2,3,9}};
int [][]arrtrans=new int[arr[0].length][arr.length];
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[0].length;j++){
arrtrans[j][i]=arr[i][j];
}
}
for(int i=0;i<arrtrans.length;i++){
for(int j=0;j<arrtrans[0].length;j++){
System.out.print(arrtrans[i][j]);
}
System.out.println();
}
}