Appearance
全局配置
Appearance
是一个特殊的变量,存储相同数据类型的一组数据(多个)
普通变量 VS 数组 声明一个普通变量就是在内存中划出一块合适的空间来保存数据 声明一个数组就是在内存中划出一串连续的空间来保存数据
1.标识符 数组名称(变量名) 2.数组元素 数组中保存的数据 3.元素下标 数据的编号(从0开始,逐1递增) 4.元素类型 数组中保存的数据的类型
数组中的所有元素必须是相同的数据类型, 任意的数据类型都可以定义它的一个数组。
1.声明数组 数据类型[] 数组名/数据类型 数组名[]; int[] array 或 int array[];
2.分配内存空间 指定数组内部独立空间的个数,指定数组的长度 数组名 = new 数组类型[长度]; array = new int[5];
3.赋值 给数组添加元素 数组名[下标] = 数值; array[1] = 5;
4.使用数组 数组名[下标] System.out.print(array[1]);
示例:创建数组的三种写法
int[] array;
array = new int[5];
for(int i = 0; i < array.length; i++) {
array[i] = i+1;
}
// 不能分成两行写,必须写在一行。
int[] array = {1,2,3,4,5};
int[] array2 = new int[]{1,2,3,4,5};
1.数据类型确定不能修改,数组中只能保存一种数据类型的数据。 2.数组一旦创建,长度不能修改。 3.数组下标从0开始,逐1递增,注意数组下标越界的问题。
1.编译时错误,一般指语法错误,编译无法通过,直接报错,可以直接看到(IDE集成开发环境会直接给出提示信息)。 2.运行时错误,符合语法规范,编译可以通过,逻辑错误,运行时直接报错。
int[] array = {1,2,3,4,5};
for (int num:array) {
System.out.println(num)
}
举例:
// 有一组学员成绩,{ 99, 85, 82, 63, 60},新增一个学员成绩,添加到数组中,同时要求新的数组同样保持降序排列。
public class Test {
public static void main(String[] args) {
int array = { 99, 85, 82, 63, 60 };
System.out.println("请输入新学员成绩")
Scanner scanner = new Scanner(System.in)
int score = scanner.nextInt();
int [] array2 = new int[6]
int index = 5;
for (int i = 0; i < array.length; i++) {
if (score > array[i]) {
index = i;
break;
}
}
array2[index] = score
for (int i = 0; i < index; i++) {
array2[i] = array[i];
}
for (int i = index + 1; i < array2.length; i++) {
array2[i] = array[i-1];
}
for (int i : array2) {
System.out.println(i);
}
}
}
// 返回值类型 方法
// 比较两个数组是否相等(数组长度一致,元素相等)
boolean equals(array1, array2)
// 对数组进行升序排列
[] sort(array)
// 将array转换为字符串
String toString(array)
// 将数组的所有元素都填充成val
[] fill(array, val)
// 将数组复制成一个长度为length的新数组,并且数组元素保持不变
[] copyOf(array, length)
// 查询val在数组中的下标
int binarySearch(array, val)
// 一维数组:
// 数据类型[] 数组名;
// 数据类型 数组名[];
public class Test {
public static void main(String[] args) {
//每个班有5名学生,一共5个班,以班为单位统计所有学生的成绩
int[] array1 = {100,90,80,70,60};
int[] array2 = {100,90,80,70,60};
int[] array3 = {100,90,80,70,60};
int[] array4 = {100,90,80,70,60};
int[] array5 = {100,90,80,70,60};
}
}
数据类型[][] 数组名; 数据类型 数组名[][];
1.声明 2.分配内存空间 3.赋值 4.使用
public class Test {
public static void main(String[] args) {
// 每班2名学生,一共3个班
// 方式一:
// int[][] array = {{100,90},{90,80},{80,70}};
// 方式二:
// 1.声明二维数组
int[][] array;
// 2.分配内存空间
array = new int[3][3];
// 3.赋值
array[0][0] = 100;
array[0][1] = 90;
array[1][0] = 80;
array[1][1] = 70;
array[2][0] = 60;
array[2][1] = 50;
// 4.使用
System.out.println(array[2][1]);
}
}
栈内存,堆内存
基本数据类型:8种基本数据类型对应的变量,存放在栈内存中。 引用数据类型:通过new关键字创建的变量,存在在栈内存和堆内存中。
int num = 10;
String str = new String("Java");
//栈内存和字符串常量池中 String str = "Java"; syso(str);
1.Java中的变量都是保存在栈内存中。
2.如果是基本数据类型,栈内存中保存的就是基本数据类型;
3.如果是引用数据类型,栈内存中保存的是堆内存中的内存地址,进而引用到堆内存中的数据。
public class Test2 {
public static void main(String[] args) {
//3个班级,每班5个学生,使用二维数组计算每个班的总成绩
int[][] score = new int[2][3];
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < score.length; i++) {
System.out.println("-----请输入第"+(i+1)+"个班的学员成绩-----");
for(int j = 0; j < score[0].length;j++) {
System.out.print("请输入第"+(j+1)+"个学员的成绩:");
score[i][j] = scanner.nextInt();
}
}
int sum = 0;
for(int i = 0; i < score.length; i++) {
sum = 0;
for(int sco:score[i]) {
sum += sco;
}
System.out.println((i+1)+"班的学员总成绩是:"+sum);
}
}
}