以下为本章节的学习目录:
1. 流程控制
1.1 复合语句
1.2 条件语句
1.3 循环语句
1.4 跳转语句
2. 数组
2.1 数组声明
2.2 数组初始化
2.3 二维数组
3. 总结
1
复合语句
对于复合语句,我们只需知道,复合语句为局部变量创建了一个作用域,该作用域为程序的一部分,在该作用域中某个变量被创建并能够被使用,如果在某个变量的作用域外使用该变量,则会发生错误。并且复合语句中可以嵌套复合语句。
2
条件语句
条件语句可以根据不同的情况来执行不同语句。包括if语句与switch多分支语句。这是我们学习Java的基础和重点。
1. if条件语句
我们在使用if语句时,可以选择是否要执行紧跟在条件之后的语句。关键字if后面是作为条件的“布尔表达式”,如果表达式返回true,则执行后面的语句;返回为false,则不执行if后的语句。
条件语句可分为简单的if条件语句、if···else语句和if···else if多分支语句。
int a = 110; if(a == 110) { System.out.println(a); }如上面的代码,{}之间是复合语句,if做为条件语句,翻译过来理解就是如果a等于110,输出a的值,否则不执行。
if后面的()内的表达式必须是boolean型。如果为true,执行if后的复合语句;如果为false,执行else后的复合语句。 如:
public class Getifelse { public static void main(String[] args) { int math = 80; // 声明,数学成绩为80(及格) int english = 50; // 声明,英语成绩为50(不及格) if(math >= 60) { // if判断语句判断math是否大于等于60 System.out.println("程序员的路math has passed"); } else { // if条件不成立 System.out.println("程序员的路math has not passed"); } if(english >= 60) { // if判断语句判断english是否大于等于60 System.out.println("程序员的路english has passed"); } else { // if条件不成立 System.out.println("程序员的路english has not passed"); } } }运行结果为:
程序员的路english has not passed
3. if else if多分支语句
if else if多分支语句用于针对某一事件的多种情况进行处理。通常表现为“满足某种条件”,就进行某种处理,否则,如果满足另一种条件,则进行另一种处理。 如:
public class GetTerm { public static void main(String[] args) { int x = 40; if(x > 60) { System.out.println("程序员的路x的值大于60"); } else if (x > 30) { System.out.println("程序员的路x的值大于30但小于60"); } else if (x > 0) { System.out.println("程序员的路x的值大于0但小于30"); } else { System.out.println("程序员的路x的值小于等于0"); } } }上述例子中,x为40,条件x>60为false,程序向下执行判断;x>30为真,所以执行条件x>30后的程序块中的语句。输出结果如下:
switch语句是一种比较简单明了的多选一的选择,在Java语言中,可以用switch语句将动作组织起来进行多选一。语法格式如下:
switch(表达式) { case 常量值1: 语句块1 [break;] ... case 常量值n: 语句块2 [break;] default: 语句块 n+1; [break;] }
switch语句中表达式的值必须是整型或字符型,常量值1~n必须也是整型或字符型。 简单说一下switch语句是怎么执行的(重点,初学的朋友要注意)。首先switch语句先计算表达式的值,如果表达式的值与case后的常量值相同,则执行该case后的若干个语句,直到遇到break语句为止。如果没有break,则继续执行下一case中的若干语句,直到遇到break为止。若没有一个常量的值与表达式的值相同,则执行default后面的语句。default语句可选,如果不存在default语句,而且switch语句中的表达式的值与任何case的常量值都不相同,则switch不做任何处理。并且,同一个switch语句,case的常量值必须互不相同。
例:用switch语句打印出星期的英文单词
import java.util.Scanner; public class GetSwitch { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("请输入今天星期几:"); int week = scan.nextInt(); switch (week) { case 1: System.out.println("程序员的路Monday"); break; case 2: System.out.println("程序员的路Tuesday"); break; case 3: System.out.println("程序员的路Wednesday"); break; case 4: System.out.println("程序员的路Thursday"); break; case 5: System.out.println("程序员的路Friday"); break; case 6: System.out.println("程序员的路Saturday"); break; case 7: System.out.println("程序员的路Sunday"); break; default: System.out.println("程序员的路Sorry,I don't konw"); break; } } }这里Scanner是一个扫描器,用来输入的,使用时需在package下面用import语句导入Scanner类,我们可以在控制台中输入一个数字,然后用nextInt()来接收,这样week的值就是我们输入的数字,接下来执行switch语句,有7个case分别对应周一到周末,default在输入1~7以外的数据时执行。假设在控制台中输入1,则控制台会执行case 1后的语句,输出了Monday,结果如下:
3
循环语句
循环语句就是在满足一定条件的情况下反复执行某一个操作。包括while循环语句、do•••while循环语句和for循环语句。
1. while循环语句
while循环语句的循环方式为利用一个条件来控制是否要继续反复执行这个语句。
假设现在有1~10十个数字,我们要将它们相加求和,在学习while之前可能会直接用+运算符从1加到10,也就是1+2+3+4+5+6+7+8+9+10,但如果现在需要从1加到1万呢?10万?所以,我们要引入while循环来进行循环相加,如下:
public class GetSum { public static void main(String[] args) { int x = 1; // 定义初值 int sum = 0; // 定义求和变量,用于存储相加后的结果 while(x <= 10) { sum += x; // 循环相加,也即 sum = sum + x; x++; } System.out.println(sum); } }这就是一个从1加到10的代码,首先定义一个初值x为1,然后定义一个存储相加结果的变量sum为0,循环条件为x<=10,也就是每次判断x<=10是否成立,成立则继续循环。循环内第一句“sum +=x;”其实就是“sum = sum +x;”的另一种写法,是在sum的基础上加x,并赋给sum,那么此时sum的值为0+1=1了,然后x++,x自增1为2,判断x<=10,则继续循环,sum的值变为1+2=3,然后x++变为3,如此循环下去,直到x为11时退出循环,此时sum的值就是1+2+3+4+5+6+7+8+9+10最后的结果55了。
在while循环语句中,如果while语句后直接加分号,如while(a == 5);代表当前while为空语句,进入无线循环。
2. do•••while循环语句
do•••while循环语句与while循环语句的区别是,while循环语句先判断条件是否成立再执行循环体,而do•••while循环语句则先执行一次循环后,再判断条件是否成立。也即do•••while至少执行一次。
语法格式如下:
do {
执行语句
} while (条件表达式);
下面对while循环语句与do•••while循环语句进行一个对比:
public class Cycle { public static void main(String[] args) { int a = 10; int b = 10; // while循环语句 while(a == 8) { System.out.println("a == " + a); a--; } // do•••while循环语句 do { System.out.println("b == " + b); b--; } while(b == 8); } }
运行结果为:b == 10
这里,a、b都为10,先看while循环语句,进入while下语句块的条件是a == 8,很明显不成立,所以不执行,结果中没有关于a的结果,然后再看do•••while循环语句,先执行一次do后的语句块,输出“b == 10”,然后判断while条件b == 8不成立,循环结束,所以结果只有一个do•••while语句中执行的第一步b == 10。
for循环语句是Java程序设计中最有用的循环语句之一。一个for循环可以用来重复执行某条语句,知道某个条件得到满足。语法格式如下: for(表达式1; 表达式2; 表达式3) { 语句序列 }
其中,表达式1为初始化表达式,负责完成变量的初始化;表达式2为循环条件表达式,指定循环条件;表达式3为循环后操作表达式,负责修整变量,改变循环条件。三个表达式间用分号隔开。
例:用for循环语句求100以内所有偶数的和。
public class Circulate { public static void main(String[] args) { int sum = 0; for(int i=2; i<=100; i+=2) { sum += i; } System.out.println(sum); } }for循环内,首先定义一个变量并赋初值,表示循环中i从2开始进行,然后条件为i<=100,即i<=100时进行循环并执行语句块中的语句,第三个表达式“i+=2”表示每次循环执行i=i+1,即没循环一次,i的值为在原来的基础上加2后的值。然后循环求sum的值,即2+4+6+8+•••+100,当i=102时退出循环,执行输出语句,输出结果为2550。
说到for循环语句就不得提到foreach语句了,它是Java5后新增的for语句的特殊简化版本,并不能完全替代for语句,但所有foreach语句都可以改写为for语句。foreach语句在遍历数组等时为程序员提供了很大的方便。
语法格式如下:
for(元素变量x : 遍历对象obj) {
引用了x的Java语句;
}
下面举一个例子说明foreach怎么遍历的:
int array[] = {7, 8, 9}; for (int arr : array) { System.out.println(arr); }
array是一个一维数组,其中有7、8、9三个值,现在要将这三个值打印到控制台上,用foreach语句相比for语句会简单很多。其中,在for的条件中,先定义了一个整型变量arr(只要和要遍历的数组名不同即可),冒号后则是要遍历的数组名,那么{}间就是要循环的内容了。
4
跳转语句
Java语言提供了三种跳转语句,分别是break语句、continue语句和return语句。
1. break语句
break语句刚刚在switch中已经见过了,是用来中止case的。实际上break语句在for、while、do•••while循环语句中,用于强行退出当前循环,为什么说是当前循环呢,因为break只能跳出离它最近的那个循环的循环体,假设有两个循环嵌套使用,break用在内层循环下,则break只能跳出内层循环,如下:
for(int i=0; i<n; i++) { // 外层循环 for(int j=0; j<n ;j++) { // 内层循环 break; } }2. continue语句
public class ContinueDemo { public static void main(String[] args) { int i = 0; while(i < 10) { i++; if(i%2 == 0) { // 能被2整除,是偶数 continue; // 跳过当前循环 } System.out.print(i + " "); } } }这里if条件判断是否为偶数,如果是偶数则执行continue,直接跳出本次循环,不进行continue后的步骤(即不执行输出语句),然后下一次循环为奇数,输出i,运行结果如下:
public void getName() { return name; }
例如上方代码,这是一个方法用于获取姓名,当调用这个方法时将返回姓名值。
2.1. 数组声明
数组的声明有两种方式: type arrayName[]; type[] arrayName; 两种方式都可以,高维数组也是如此,根据自己的编程习惯选择即可。
2.2. 数组初始化
方式一: //分配长度为 4 个 int 型的内存空间,并分别赋初始值1,2,3,4 int[] array = new int[]{1, 2, 3, 4}; 方式二: //方式一的简写 int[] array = {1, 2, 3, 4}; 方式三: //分配长度为 4 的内存空间,并全部赋为默认值 0 //相当于 int[] array = new int[4]{0, 0, 0, 0} 的简写 int[] array = new int[4];
数组的默认值(一般规律为数值型数组默认值为 0,引用型数组默认值为 null):
数组类型:默认初始值
byte:0
short:0
int:0
long:0
char:编码为0的字符
String(引用类型):null
float:0.0
double:0.0
boolean:false
注意还有一点区别是:
对于返回值类型为数组类型的函数来说,我们可以return new int[3];,我们也可以return new int[]{1, 2, 3};,但我们不可以return {1, 2, 3};。即方式二仅是方式一的简写,其不能脱离数组的声明,{1, 2, 3}并不能返回一个数组对象。
2.3. 二维数组
Java 语言把二维数组看成是数组的数组,不同于 C/C++ 二维数组分配的是连续内存,Java 的高维数组分配的并非是连续内存,所以不要求二维数组的每一维的大小相同。 实质上,Java 高维数组还是一维数组,只不过这个一维数组的元素比较特殊,是由低一维的数组这种引用类型的引用构成的。 二维数组三种常见的定义方式:
方式一: int[][] array = new int[3][2]; 即创建了一个 3*2 的二维数组,array 里有三个数组元素,三个数组元素都是长度为 2 的一维数组的引用。 方式二: int[][] array = new int[3][]; //由于二维数组相当于是一维数组这种引用类型的引用组成的 //所以此时等价于 int[][] array = {null, null, null} //下面可以为 array 数组分别赋上长度不同的一维数组 array[0] = new int[1]; array[1] = new int[2]; array[2] = new int[3]; 方式三: int[][] array = {{1, 2}, {1, 3, 5}, {2}};
通过本章节我们可以掌握java的流程控制和数组的入门和使用。
流程控制我们讲解了复合、条件、循环、跳转语句的使用场景和详细说明。
数组我们讲解了数组的数据类型和使用。
流程控制和数组在我们今后的编程中为常用的知识,需要牢记并熟练的使用。
至此文章解决完毕。