一、分支语句
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后如果只有一条语句,如上代码只有一条输出,可不加{},但是为了代码可读性,防止代码过多出现不必要的错误,建议所有的if、else后都加上相应的{}。
2. if else语句
if else语句是条件语句中最常用的一种形式,它会针对某种条件作出选择处理。通常表现为“满足某种条件,就进行某种处理,否则就进行另一种处理”。
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");
}
}
}
运行结果为:
程序员的路math has 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");
}elseif(x >30){
System.out.println("程序员的路x的值大于30但小于60");
}elseif(x >0){
System.out.println("程序员的路x的值大于0但小于30");
}else{
System.out.println("程序员的路x的值小于等于0");
}
}
}
上述例子中,x为40,条件x>60为false,程序向下执行判断;x>30为真,所以执行条件x>30后的程序块中的语句。输出结果如下:
程序员的路x的值大于30值小于60
所以,if语句只执行条件为真的语句,其它语句都不会执行。
4. switch多分支语句
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 =newScanner(System.in);
System.out.print("请输入今天星期几:");
int week = scan.nextInt();
switch(week){
case1:
System.out.println("程序员的路Monday");
break;
case2:
System.out.println("程序员的路Tuesday");
break;
case3:
System.out.println("程序员的路Wednesday");
break;
case4:
System.out.println("程序员的路Thursday");
break;
case5:
System.out.println("程序员的路Friday");
break;
case6:
System.out.println("程序员的路Saturday");
break;
case7:
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以外的数据时执行。假设在控制台中输入2,则控制台会执行case 2后的语句,输出了Monday,结果如下:
请输入今天星期几:2 程序员的路Tuesday
注意: case后的常量表达式的值可为整数和字符,但不可是实数后字符串,比如case 1.1,case “ok”都是非法的。
二、循环语句
循环语句就是在达到一定条件的情况下反复执行某一个操作。包括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。
3. for循环语句
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 arrs[]={1,2,3};
for(int item : arrs){
System.out.println(item);
}
arrs为一维数组,有1、2、3三个值,我们要将这三个值打印到控制台,可以采用foreach语句,foreach相比for语句要简洁很多。在for的条件中,需要先定义一个整型变量item(名称不能和遍历的数组名相同),冒号后则是要遍历的数组名,{}间就是要循环的内容。
三、跳转语句
Java语言提供了三种跳转语句,分别是break、continue和return语句。
1. break语句
break语句刚刚在switch中已经使用过了,作用是用来中止case。实际上break语句在for、while、do while循环语句中,用于强行退出当前循环。为什么说是退出当前循环,因为break只能跳出离它最近的那个循环体,假如有两个循环嵌套使用,break用在内层循环下,则break只能跳出内层循环,如下:
for(int i=0; i
// 外层循环
for(int j=0; j
// 内层循环
break;
}
}
2. continue语句
continue语句只能用在for、while、do while循环语句中,让程序直接跳过后面的语句,进入下次循环。
例:输出10以内的所有奇数
public class TestContinue{
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,运行结果如下:
1 3 5 7 9
3. return语句
return可从一个方法中返回,并将控制权交给调用它的语句。
public void getUserName(){
return "程序员的路";
}
如上代码,这是一个方法用于获取用户名,当调用这个方法时将返回程序员的路字符串。
四、数值
1.1、数组声明
数组的声明有两种方式:type arrayName[]; type[] arrayName; 两种方式都可以,高维数组也是如此,根据自己的编程习惯选择即可。
2.2.数组初始化
方式一:
//分配长度为 4 个 int 型的内存空间,并分别赋初始值1,2,3,4
int[] array =newint[]{1,2,3,4};
方式二:
//方式一的简写 int[] array ={1,2,3,4};
方式三:
//分配长度为 4 的内存空间,并全部赋为默认值 0
//相当于 int[] array = new int[4]{0, 0, 0, 0} 的简写
int[] array =newint[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 =newint[3][2];
即创建了一个3*2的二维数组,array 里有三个数组元素,三个数组元素都是长度为2的一维数组的引用。
方式二:
int[][] array =newint[3][];
//由于二维数组相当于是一维数组这种引用类型的引用组成的
//所以此时等价于 int[][] array = {null, null, null}
//下面可以为 array 数组分别赋上长度不同的一维数组
array[0]=newint[1];
array[1]=newint[2]; array[2]=newint[3];
方式三:
int[][] array ={{1,2},{1,3,5},{2}};
03 总结
1、通过本这次学习可以掌握java的流程控制和数组的入门和使用。
2、流程控制讲解了复合、条件、循环、跳转语句的使用场景和详细说明。
3、数组讲解了数组的数据类型和使用。
4、流程控制和数组在我们今后的编程中为常用的知识,需要牢记并熟练的使用。