数组
概念:存储数据容器
一、特点
1、只能存储同一种数据类型
2、长度固定
3、直接打印数组名,打印的是数组在堆内存中的地址
4、数组在创建后们都会根据类型赋予初始值
整型:0
浮点型:0.0
布尔型:false
字符型:null,\u0000,控制台中只以一个空格显示
其他(引用类型):null
二、创建
[]的位置可以放在数据类型之后,也可以放在数组名之后
2.1 静态创建
格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,…};
变形:
数据类型[] 数组名= {元素1,元素2,元素3,…};
注:当编码完成时,之歌数组的长度就固定了,在编译运行期间不能在对数组的长度进行改动,即不能对数组的元素进行增删
2.2 动态创建
格式:
数据类型[] 数组名 = new 数据类型[长度];
下标:索引、角标、范围是0~长度-1
获取数组的长度:数组名.length
赋值:数组名[下标] = 值;
四、数组的遍历
1、借助Arrays工具类的toString(),将数组以字符串的形式输出
2、循环遍历
int[] arr = {x,x,x,x,x,…};
for(int i = 0;i<=arr.length-1;i++ ){
arr[i];
}
五、存在的问题
1、ArrayIndexOutofBoundException,数组下标越界异常
烟瘾L数组的下标的范围是0~长度-1,如果下标出现了负数或者超过了长度-1,就会发生此异常
解决:使下标处于合理范围内
2、NullPointerException,空指针异常
原因:数组对象没有new过就使用
解决:new它
六、数组排序
6.1冒泡排序
int[] brr = {1,5,3,-8,2,6,-2};
for(int i = 0;i<brr.length-1;i++){
for(int j=0;j<brr.length-1-i;j++){
if(brr[j] > brr[j+1]){
int t = brr[j];
brr[j] = brr[j];
brr[j] = brr[j+1];
brr[j+1}=t;
}
}
}
6.2 选择排序
int[] crr = {1,3,22,4,-11,5,8};
int minIndex;
for(int i = 0;i < crr.length - 1;i++){
minIndex = i;
for(int j = i + 1; j < crr.length;j++ ){
if(crr[minIndex] > crr[j]){
minIndex = j;
}
}
int t = crr[i];
crr[i] = crr[minIndex];
crr[minIndex] = t;
}
二维数组
概念:存储数组元素的数组
一、创建
1、
数据类型[][] 数组名 = new 数据类型[小数组的个数][每一个小数组的长度];
2、
数组类型[][] 数组名 = new 数组类型[小数组的个数][]
这种创建方式的二维数组中的小数组,需要单独进行创建
3、
数据类型[][] 数据名 = {
{元素1.元素2,…}
{元素1.元素2,…}
…
};
二、遍历
for(int i = 0;i <= arr.length - 1;i++){
for(int j = 0;j<=arr[i].length - 1;j++){
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
有十个大箱子,每个大箱子中有十个小巷子,正常情况下,每个小箱子重1斤,现有一个大箱子,里面的每一个小箱子都只有0.9斤,用电子称称一次,找到缺斤短两的大箱子。
方法:
一~十号大箱子
一号拿1,二号拿2,三号拿3,。。。。十号拿10;
称好后,缺0.几斤就是几号箱子