目录
数组的定义
一维数组
1.语法
1.定义数组
2.分配空间和赋值方式:
3.各数据类型初始值
4.注意事项
2.数组的经典用例
1.求最大值/最小值
2.添加元素
3.修改元素
4.删除元素
二维数组
1.语法
2.二维数组的遍历
1.数组是一个变量,存储相同数据类型的一组数据
2.声明一个变量就是在内存空间划出一块合适的空间
声明一个数组就是在内存空间划出一串连续的空间
3.数组基本要素
标识符:数组的名称
数组元素:数组中存放的数据
元素下标:对数组元素进行编号,数组下标从0开始,数组中的每个元素都可以通过下标来访问
元素类型:数组元素的数据类型
注意:数组的长度固定不变,避免数组越界
数据类型 [ ] 数组名 = new 数据类型 [数组长度];
或者
数据类型 数组名[ ] = new 数据类型 [数组长度];
注意:1.定义数组时数组类型表示数组中存储的数据都是该类型数据
2.定义数组时一定要有 [ ] , 表示定义了一个数组,而不是一个普通的变量
3.定义数组时如果写等号右边的new--,则需要表明数组长度
数组元素类型 | 默认初始值 |
byte、short、int、long | 0 |
float、double | 0.0 |
char | 'u0000' |
boolean | false |
引用数据类型 | null |
1.数组的下标是从零开始的,数组中的每个元素都可以通过下标来访问,最大到数组长度-1
2.数组名称后缀加Array,规范一点
3.字符串判断为空值的时候不用equal,直接用==即可
4.避免数组越界,等价于上边的写法,定义一个String 类型的变量shop,直接用定义的数组名加.for,回车
5.数组在编译时一定要写明数组的长度,否则不可以使用,编译出错
6.创建数组时,若要直接赋值,必须在一条语句中完成:
找最大值和最小值一样,需要先单独创建一个对象,用来存储数组中的任意一个数,但为了方便,建议为第一个数字,然后依次和数组中的数字去比较,每次的结果将大的(小的)值赋给max,然后继续比较,知道将数组中的数字比较完为止。
找最大值:
//计算成绩最大max = scores[0];//max存放最大值,初始值为数组第一个数//遍历数组,从数组第二个数组开始依次和max比较,比较到数组的最后一个数,所以i<数组的长度for(int i = 1; i < scores.length; i++){//如果大于max,就把这个值赋值给max,然后继续比较,知道数组的数字比较完。if(scores[i] > max){max = scores[i];}}System.out.println("考试成绩最高分为:" + max);
找最小值:
public class LowestPrice {static Scanner sc = new Scanner(System.in);/*** @description 张浩想买一部手机,他询问了四家店的价格,分别是3000元、3150元、2900元和2950元,请编程求出最低价格* @author banban* @date 2022-07-14 17:28:11* @param args* @return */public static void main(String[] args) {System.out.println("请输入4家店的价格");double[] priceArray = new double[4];//定义一个长度为4的数组存放每家店的价格for (int i = 0; i < priceArray.length; i++) {//依次输入每家店的价格System.out.print("第" + (i+1) + "家店的价格:");priceArray[i] = sc.nextDouble();}double lowestPrice = priceArray[0];//存放最低价,初始值为第一家店的价格for (int i = 0; i < priceArray.length; i++) {//比较每家店的价格,如果priceArray比lowestPrice低if (lowestPrice > priceArray[i]) {//就把priceArray的值赋给lowestPricelowestPrice = priceArray[i];}}System.out.println("最低价格为:" + lowestPrice);}
}
在数组中添加元素,如果知道要添加的元素在那个位置,可以直接赋值进行添加。
如果不知道,比如要在数组里为空的位置添加东西,此时首先要遍历数组,找到要插入的位置的下标,然后在该数组的该下标位置进行添加。此时需要建立一个索引,用来存放下标位置。当找到为空的位置时,将此下标赋值给索引。再将数组中此下标位置进行赋值。
public class AddBook {/*** @description 有一个存储图书名称的数组,数据如下:* String[] books={“三国演义”,“红楼梦”, “史记” , null , “左传”,”菜根谭”};* 在null的位置插入西游记* @author banban* @date 2022-07-14 17:38:20* @param args* @return */public static void main(String[] args) {//有一个books的数组String[] books = {"三国演义","红楼梦","史记",null ,"左传","菜根谭"};int num = -1;//定义一个索引,存储数组中为空值的下标数for (int i = 0; i < books.length; i++) {//遍历数组,找出为空值的位置if (books[i] == null) {//当数组中该下标中的位置为空值时num = i;//将下标值赋给numbooks[num] = "西游记";//将数组中该位置存入西游记break;}}for (int i = 0; i < books.length; i++) {//输出数组值System.out.println(books[i]);}}
}
修改元素和插入元素类似,都是要首先遍历数组,通过比较找到要修改的数组下标,然后进行修改。
删除元素比较复杂,他需要先找到要删除的元素位置,也需要建立一个索引,然后将数组后面的数依次往前挪,将数组最后一位设置为null,也就是说,需要两个for循环,但是第二次遍历的不是整个数组,而是从要删除的元素下标开始,到数组倒数第二位结束,因为每次都是将后一个值赋给前一位,往前挪一位相当于,所以数组最后一位已经没有后一位给他赋值了,如果i<数组长度,那么会报数组越界错误。
public class DeletBook {/*** @description 有一个存储图书名称的数组,数据如下:* String[] books={“三国演义”,“红楼梦”, “史记” , “西游记”, “左传”,”菜根谭”};* 删除“左传”这个元素,将后面的元素依次往前推,将最后一位设置为null。* @author banban* @date 2022-07-14 17:49:31* @param args* @return */public static void main(String[] args) {//有一个books的数组String[] books = {"三国演义","红楼梦","史记","西游记" ,"左传","菜根谭"};int num = -1;//定义一个索引,存储数组中为左传的下标数for (int i = 0; i < books.length; i++) {//遍历数组,找出数组中左传的存储位置if ("左传".equals(books[i])) {//如果数组中该位置存储的是左传num = i;//将下标数赋值给numbreak;}}//从左传下标数开始,到数组倒数第二位结束for (int i = num; i < books.length-1; i++) {//将后一位的值赋给前一位,此时数组最后一个值不变,仍是菜根谭books[i] = books[i+1];}books[books.length-1] = null;//将数组最后一个值变成空值for (int i = 0; i < books.length; i++) {//输出数组值System.out.println(books[i]);}}
}
数据类型 [ ] [ ] 数组名; 或者 数据类型 数组名 [ ] [ ] ;
1)数据类型为数组元素的类型。
2)“[ ] [ ]”用于表明定义了一个二维数组,通过多个下标进行数据访问。
3)从内存分配原理的角度看,Java中只存在一维数组,不存在多维数组,或者说,本质上二维数组还是一维数组。他是将一维数组里的每个元素再次进行划分成多个位置。
4)定义二维数组时,可以先不写第二个[ ]里的长度,但是最大维数一定要写,即第一个[ ]
5)二维数组直接赋值方式
int [ ] [ ] array = new int [ ] [ ] {{80,66},{70,54,98},{77,59}};
此时表示二维数组最大维数为3,每个元素里又包含三个元素
//二维数组的遍历需要双重循环 public static void main(String[] args){int[][] gradeArray = new int[][]{{80,66},{70,54,98},{77,59}};int total;//保存总成绩for (int i = 0; i < gradeArray.length; i++) {String str = (i+1) + "班";total = 0;//每次循环都把总成绩归零for (int j = 0; j < gradeArray[i].length; j++) {total += gradeArray[i][j];//成绩累加}System.out.println(str + "总成绩:" + total);} }
上述代码求每个班的总成绩,一共三个班,运行结果为:
本文发布于:2024-01-28 10:25:10,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064087166753.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |