Java一维数组
目录
问题引入
例如,
- 我们要在Java里保存20位同学的考试成绩,
- 我们要存5000个随机数,
- 或者我们要保存保存1万个账号,
我们怎么办呢 ?
什么是数组
- 可以用数组来解决。
- 数组是编程语言中最常见的一种数据结构和用于存储多个数据。
- 数组里面元素存放一个数据,所有的数组元素都具有相同的数据类型。
数组的声明
为了在程序中使用数组,我们首先指明数组的数据类型并且声明定义数组的名称,
Java里面,所有的数组元素,都具有相同的数据类型。
声明数组的格式为:
数据类型[] arrayName; // 首选的方法 或 数据类型 arrayName[]; // 效果相同,但不是首选方法
可以是任意数据类型,但是数组中的元素必须具有相同的数据类型
下面就是是声明数组变量的例子:
double[] prices; //这句话声明了一个double类型的数组prices
double prices[]; // 效果相同,但不是首选方法
int[] num;
String[] size;
数组的初始化
数组创建完成之后,我们必须确定每个数组元素的值,这个过程称为数组的初始化。
初始化分为两种:静态初始化和动态初始化。
静态初始化
初始化时,由程序员显示指定每个数组元素的初始值,由系统决定数组的长度。
语法如下:
数据类型[] arrayRefVar = {value0, value1, ..., valuek};
使用这种初始化方法时,在声明数组的同时即完成初始化:如:
double[] prices={1,2,3};
而不能这样分成两句写:
double [] prices; prices = {1,2,3}
动态初始化
动态初始化只指定数组的长度,由系统为每个数组元素指定初始值,
语法如下:
arrayName= new 数据类型[arraySize];
告诉计算机,我建立的这个数组 大小是arraySize, 包含arraySize个相同类型的元素。
用new运算符在内存中为其分配相等大小的空间。
例如上面声明的数组prices ,可以通过下列语句创建
double[] prices;//声明数组 prices= new double[3];//动态初始化:只指定长度,不指定元素值 ... price[0]=1; price[1]=2; price[2]=3;
或者,上面的第一句和第二句合并一下也行,在声明的同时,指定长度:
double [] prices= new double[3];//在声明数组的同时,为它分配空间,即动态初始化。 ... price[0]=1; price[1]=2; price[2]=3;
例子:
public class TestArray { public static void main(String[] args) { // 数组大小 int size = 5; //第1种方法:静态初始化 String [] menu2 = {"同学甲","同学乙","同学丙","好友A","好友丙"}; //第2种方法:动态初始化 String [] menu1 = new double[size]; menu1[0] = "同学甲"; menu1[1] = "同学乙"; menu1[2] = "同学丙"; menu1[3] = "好友A"; menu1[4] = "好友丙"; } }
练习:用两种方法把商院面馆的菜单储存进数组。("阳春面","油泼面","鸡汤面","火鸡面","安徽板面")
思考:数组动态初始化后如果不给它赋值,会怎样呢 ?
- 如果数组创建后不进行初始化,基本类型的数组元素会赋予默认值:数据类型的默认值是0,char型的默认值是’\u0000’,boolean型的默认值是false。
访问数组元素
获取数组长度
数组一旦创建,它的数据类型和数组大小都是确定的,可以通过‘数组名.length’获得数组的大小,例如prices.length为5。
System.out.println(prices.length); System.out.println(num.length);
读取和写入
数组中的元素可以通过下标访问,数组中的每个元素都可以使用下面的语法表示:
arrayName[index]
例子:
public class TestArray { public static void main(String[] args) { String [] menu2 = {"同学甲","同学乙","同学丙","好友A","好友丙"}; System.out.println(menu2[0]); System.out.println(menu2[1]); System.out.println(menu2[2]); System.out.println(menu2[3]); System.out.println(menu2[4]); menu2[0]="阿里甲总"; menu2[1]="腾讯乙总"; menu2[2]="百度丙总"; menu2[3]="京东A总"; menu2[4]="自主创业身价过亿的低调小王"; } }
注意:index是数组下标,它是基于0的,也就是说index的取值范围从0开始到arrayRefVar.length-1结束,一旦超出这个范围会触发异常(异常的名字叫java.lang.ArrayIndexOutOfBoundsException)。
遍历数组
通过观察,我们发现上述完全可以用循环来解决。
循环读数据
System.out.println(); System.out.println("10年后:"); for(int i=0;i<menu2.length;i++) { System.out.println(menu2[i]); }
循环写数据
Scanner sc = new Scanner(System.in); String s; for(int i=0;i<menu2.length;i++) { System.out.println("请输入名称:"); menu2[i] =sc.nextLine(); } sc.close();
循环比较大小、求和
求最大值:
采用打擂台的方式,假定最大元素为第一个元素,然后将每个元素与最大元素进行比较,如果该元素大于最大元素,则更新最大元素的值。
double [ ] score= {95,96,97,99,89}; double max = score[0]; for(int i=0;i<score.length;i++) { if(score[i]>max) { max=score[i]; } } System.out.println("最高分为:"+max);
思考:数组元素的最小值怎么求 ?
练习:求学生成绩的最大值,最小值,总分,平均值,优秀率(>90分的人)
foreach语句的适用
Java支持一个简便的for循环,简称为foreach循环,即不使用下标变量可以顺序地遍历整个数组,foreach循环的语法为:
for(elementType element :arrayRefArray){ //处理元素element }
例子:打印所有数组元素
public class TestArray { public static void main(String[] args) { double [ ] score= {95,96,97,99,89}; // 打印所有数组元素 for (double element:score) { System.out.println(element); } }
比较大小:
max = score[0]; for (double element:score) { System.out.println(element); if(element>max) { max = element; } } System.out.println("最高分为:"+max);
注意变量element必须声明为与arrayRefArray中元素具有相同的数据类型。