本篇主要介绍Java语言中的数组。
数组
程序 = 算法+数据结构
算法解决的是流程逻辑问题,比如之前讲过的if分支语句、switch语句,三种循环语句等。
数据结构是存储数据的方式。
Java中最常见的一种数据结构就是数组。
9.1 数组的定义
数组是由相同数据类型的元素,按照线性顺序组成的集合。
相同数据类型,是说一个数组中的元素必须是同一种数据类型,不允许出现不同的数据类型。
线性顺序,是指,在内存中,元素是线性排列的,可以按顺序(下标)访问。
9.2 数组的声明
Java的数组支持两种方式的声明,如下:
类型[] 数组名; //编程规范推荐此种声明方式,可读性强
类型 数组名[]; //不推荐此种声明方式
数组声明之后,系统就在内存(栈stack)上分配了空间(只是引用变量的空间)。
int[] arr;//声明int类型的数组
String[] arrStr;//声明字符串类型的数组
9.3 数组的初始化
Java中的数组必须初始化之后才能使用,所谓初始化,就是为数组的元素分配内存空间(堆内存),并为每个数组元素赋初始值。
数组的初始化方式分为静态初始化和动态初始化。
9.3.1 静态初始化
静态初始化是指由开发者指定数组元素的初始值,由系统决定数组的长度。
静态初始化的语法如下:
数组名 = new 类型[]{元素1的值,元素2的值,...,元素n的值};
其中,使用关键字new来创建数组,花括号中包含每个数组元素的值,每个元素值之间用逗号隔开,中括号中不需要指定数组长度,系统会根据花括号中数组初始值的个数,自动为数组指定长度。
案例分析:
上述代码中,while循环在年龄没有达到18岁的时候,循环输出“您未成年。”每次执行循环体,年龄就会加一,直到年龄达到18岁后,结束while循环,执行循环后面的输出“恭喜,您已成年!”。
要注意:一般情况下,循环体中需要有语句改变循环条件,使循环条件有为false的可能性,防止变成死循环。
while案例2
int age = 10;
while(age<18){
System.out.println("您未成年。");
age--;
}
System.out.println("恭喜,您已成年!");
案例分析:
上述代码从表面上看,貌似是一个死循环,会一直输出“您未成年。”但实际上并非如此,执行较长的一段时间后,会跳出循环,输出“恭喜,您已成年!”。
原因是,age是int型数据,一直减小,达到int的下边界,再减小,就会溢出,变为很大的正数。这样,就跳出了while循环。
如果想要构造死循环,推荐使用while(true){}这种形式。
8.2 do-while循环
8.2.1 do-while语法
do{
代码块;
}while(布尔表达式);
do后面的花括号中的代码块为循环体,while中的布尔表达式为循环条件,注意,do-while的最后面必须要加一个分号,这个是与while不同之处。
执行逻辑:
1)首先执行循环体中代码块
2)执行完循环体后判断布尔表达式,如果为false,则跳出循环,如果为true,则再次执行循环体中的代码块。
3)重复步骤2),直到循环条件为false,跳出循环。
8.2.2 do-while应用
int money = 220;
do{
//吃一顿饭需要100元
System.out.println("吃一顿饭花费一百元。");
money -= 100;
}while(money>100);
上述代码中,钱数为220元时,总共可以吃2顿饭,也就是循环体的代码循环了2次。但是,如果将money的初始值改为20,仍然可以吃一顿饭,虽然吃一顿饭需要100元,但如果是先吃了饭,再结账,虽然兜里的钱不够结账的,但饭已经吃完了,这就是传说中的霸王餐!!!
因此,do-while有一个特点,循环体至少会被执行一次。
8.3 for循环
8.3.1 for循环的语法
如果循环的次数是固定的,一般使用for循环,其语法如下:
for(表达式1;表达式2;表达式3){
代码块;
}
其中,表达式1一般用来对循环计数的变量进行初始化(只执行一次)。表达式2为布尔表达式,是循环条件。表达式3一般是对循环计数的变量进行改变。
其执行逻辑:
1)执行初始化表达式1
2)进行表达式2的判断
3)根据表达式2的判断结果执行:
如果为true,则执行循环体中的代码块。
如果为false,则跳出循环,不在执行4)和5)步。
4)执行表达式3
5)重复执行2)到4)步,直至跳出循环。
8.3.2 for循环的应用
求和:1+2+3+4+5+…+97+98+99+100
int sum = 0;
for(int i=1;i<=100;i++){
sum += i;
}
System.out.println("和为:"+sum);//输出和为5050
8.4 break与continue
8.4.1 break
循环过程中,如果符合某种条件时,需要终止循环,可以使用break关键字来退出循环。
比如:循环接收用户输入的内容,并原样输出,如果用户输入q则退出程序。
String str = "";
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("请输入内容:");
str = scanner.nextLine();
if(str.equals("q")){
break;//如果是q则跳出整个循环
}
System.out.println(str);
}
System.out.println("已退出程序。");
8.4.2 continue
如果在循环过程中,如果想在某个条件下调过其中的某一次循环,继续下一次循环的话,需要使用continue语句。
求和:1+2+3+4+6+7+…+99+100(注意没有5)
int sum = 0;
for(int i=1;i<=100;i++){
if(i==5){
continue;//结束第5次循环,继续执行后面的循环
}
sum += i;
}
System.out.println("和为:"+sum);//输出和为5045
8.4.3 break与continue的区别
1、break不仅可以用于循环中,还可以用于switch-case语句中;
而continue只能用于循环中。
2、break是直接结束整个循环;continue是即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定,继续执行下一次及后面的循环。
下一篇将介绍Java中的数组。