Java学习笔记-Day05 Java流程控制
一、流程控制简介
二、顺序结构
按照代码的先后顺序,依次执行。
三、选择结构
选择结构也叫分支结构、条件结构。选择结构用于判断给定的条件,然后根据判断的结果来控制程序的流程。
1、if 语句
- if 语句:如果判断语句为true,就执行执行语句。判断语句的返回值必须是boolean型。
- if/else语句:如果判断语句为true,就执行执行语句1。如果判断语句为false,则执行else代码块里的执行语句2。
- if/else if/else语句,其中的else if语句可以多个。如果 判断语句1 为true,就执行 执行语句1 。如果 判断语句1 为false,则执行 判断语句2 ,如果 判断语句2 为true,就执行 执行语句2 ,依次类推。如果判断语句都为false,则执行else代码块里的 执行语句n+1 。
1.1、if 语句的特点
if 语句的特点:灵活、单个条件、多条件、等值、区间。
2、switch 语句
有时候分支是根据常量值进行判断的,这时候虽然可以使用if/else来实现,但是用switch/case更为清晰。
break:跳出switch语句。break虽然可以省略,但是会影响执行结果。如果break省略的话,匹配的case值以及以后的所有情况(包括default)都会被执行,除非遇到break或者语句结束为止。
default语句可以省略,可以放在switch语句里面的前面、中间、后面。
switch/case中的表达式只能使用规定的基本数据类型:
JDK1.5前可以使用:基本数据类型byte、short、int、char。
public class Demo_Switch_01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.定义一个int变量
int n = 1;
// 2.switch/case语句
switch(n) {
case 1:
System.out.println("1");
break; //跳出switch语句
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
default:
System.out.println("default");
break;
}
}
}
JDK1.5之后,switch表达式类型新增加支持:枚举(enum)。
EnumSex.java
public enum EnumSex {
男, 女, 保密
}
Demo_Switch_03.java
public class Demo_Switch_03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.定义一个枚举变量
EnumSex n = EnumSex.女;
switch(n) {
case 男:
System.out.println("男");
break; //跳出switch语句
case 女:
System.out.println("女");
break;
case 保密:
System.out.println("保密");
break;
default:
System.out.println("default");
break;
}
}
}
JDK1.7之后,switch表达式类型新增加支持:String。
public class Demo_Switch_02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String n = "哈哈";
switch(n) {
case "哈哈":
System.out.println("哈哈");
break;
case "呵呵":
System.out.println("呵呵");
break;
case "娜娜":
System.out.println("娜娜");
break;
default:
System.out.println("默认");
break;
}
}
}
2.1、switch语句的特点
switch语句的特点:多条件、等值。
四、循环结构
循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。Java语言中的有三种循环语句,分别是for循环、while循环、do…while循环。
循环的四个要素:循环变量初始化、循环条件、循环体、循环变量要变化。
注意:Java中的真、假只能有boolean类型的true和false来表示,不能用数值表示。
1、for循环
1.1、普通的for循环
使用2个分号;隔开,有三个表达式。
- 表达式1:负责定义循环变量,只执行一次,先执行。
- 表达式2:负责循环条件的判断,如果条件为真,执行循环体。如果条件为假,跳过循环体,直接结束。
- 表达式3:当循环体结束之后,执行表达式3,然后再执行表达式2。
如果省略了表达式2,那么表示循环条件一直为true,此时为死循环。
1.2、增强for循环(foreach)
遍历是将集合或数组中的元素,按照一定顺序依次获取。
顺序遍历(0,1,2,3…),没有使用索引,只能遍历(只读)。
变量代表数组或集合中的元素。
int[] a=new int[]{1,2,10};
//使用增强for循环遍历
for(int n:a){
System.out.println(n);
}
2、while循环
- 循环判断条件:当循环判断条件返回true时,执行循环体,否则跳出循环体。
- 循环体:每次判断语句返回true,执行一次。
- 循环变量的变化:修改循环变量。执行一次循环体后执行。
// 循环变量初始化
int i=1;
// 循环判断条件
while(i < 4) {
// 循环体
System.out.println(i);
// 循环变量变化
i++;
}
3、do - while循环
- 关键字 while 后有一个分号。
- 循环体:第一次无条件执行,后续每次循环判断条件返回true,执行一次。
- 循环变量的变化:修改循环变量。执行一次循环体后执行。
- 循环判断条件:当循环判断条件返回true时,执行循环体,否则跳出循环体。
// 循环变量初始化
int i=1;
do {
// 循环体
System.out.println(i);
// 循环变量变化
i++;
}while(i < 4);// 循环判断条件
}
注意:
①while与do - while的区别
- 顺序:while先判断再执行,do - while先执行再判断。
- 执行次数:while可能一次都不执行,do - while至少执行一次。
②循环场景
- for循环的场景:如果循环次数固定,优先使用for循环。例如,计算1+2+…+100。
- while循环的场景:如果循环次数不固定,优先使用while循环。例如,根据用户输入来确定循环是否结束。
- do - while循环场景:无条件的先执行一次。例如,控制台的用户输入菜单。
以上只是通用说法,在场景中,for与while可以自由转换。
③循环体为空语句
五、循环的四个要素
循环变量初始化、循环判断条件、循环体、循环变量的变化。
六、编码规范
if语句、while语句、for语句中{ }必须写。如果不写{ },相当于默认有一个{ },但是只会括起来一行代码。
七、嵌套循环
循环可以嵌套使用,即循环体是另一个循环。
八、continue 与 break
1、continue
- 在循环控制语句的循环体中,可以使用continue语句,表示不再继续循环体后面的代码,继续下一次循环。
- 在多重循环时,continue默认是继续当前的循环。
- 可以在for、while、do前用 合法标识符 加 标号:,用 continue 合法标识符; 继续指定的循环;
loop1: for (int i = 0; i < 5; i++) {
loop2: for (int j = 0; j < 6; j++) {
// 当i==j时,继续i层循环。
if (i == j) {
continue loop1;
}
System.out.println("i=" + i + " j=" + j);
}
System.out.println("结束i循环的第" + i + "次循环");
}
System.out.println("结束i循环");
2、break
- 在循环控制语句的循环体中,可以使用break语句,表示终止当前循环,跳出循环体。
- 在多重循环时,break默认是终止当前的循环;
- 可以在for、while、do前用 合法标识符 加 标号:,用 break 合法标识符; 终止指定的循环;
loop1: for (int i = 0; i < 5; i++) {
loop2: for (int j = 0; j < 6; j++) {
// 当i==j时,结束i层循环。
if (i == j) {
break loop1;
}
System.out.println("i=" + i + " j=" + j);
}
System.out.println("结束i循环的第" + i + "次循环");
}
System.out.println("结束i循环");
九、题目
1、百钱买百鸡
/**
* 我国古代数学家张丘建在《算经》一书中提出的数学问题:
* 鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。
* 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
*
* @author Administrator
*
*/
public class Demo_loop_for1 {
public static void main(String[] args) {
// 公鸡个数x范围:0-20
for (int x = 0; x <= 20; x++) {
// 母鸡个数y范围:0-33
for (int y = 0; y <= 33; y++) {
// 小鸡个数z
int z = 100 - x - y;
// 判断价钱是否为100(表达式5*x + 3*y + z/3 == 100扩大3倍)
if (15 * x + 9 * y + z == 300) {
System.out.println("公鸡:"+x+"母鸡:"+y+"小鸡:"+z);
}
}
}
}
}
2、 一个球从100m高度自由落下,每次落地后反弹回原来高度的一半,再落下,求它在第10次落地并反弹到最高点,共经过多少m?第10次反弹多高?
/**
* 一个球从100m高度自由落下,每次落地后反弹回原来高度的一半,再落下.
* 求它在第10次落地并反弹到最高点,共经过多少m?第10次反弹多高?
*
* @author Administrator
*
*/
public class Demo{
public static void main(String[] args) {
// 球第几次落下
int i = 1;
// 球第一次反弹的高度
double h = 100;
// 球落下并反弹共经过多少米
double sum = 100;
// 判断球是否已经到地上
while (h > 0) {
// 高度变为原来的一半
h = h / 2;
// 判断球是否为第十次落下
if (i == 10) {
// 加上第十次反弹的高度
sum = sum + h;
break;
}
// 每次都加上这一次球反弹并落下的高度
sum = sum + 2 * h;
i++;
}
System.out.println("第10次落地并反弹到最高点,共经过: " + sum + "m");
System.out.println("第10次反弹: " + h + "m");
}
}
3、九九乘法表
/**
* 九九乘法表
*
* @author Administrator
*
*/
public class Demo_Loop_For1_99 {
public static void main(String[] args) {
// 九九乘法表的行数
for (int x = 9; x >= 1; x--) {
// 九九乘法表的列数
for (int y = 1; y <= x; y++) {
// 输出式子
System.out.print(y + "*" + x + "=" + (x * y) + "\t");
}
// 换行
System.out.println();
}
}
}
4. 控制台输出:
A
AB
ABC
ABCD
/**
* 输出 A
* AB
* ABC
* ABCD
*
* @author Administrator
*
*/
public class Demo_Loop_For2 {
public static void main(String[] args) {
// 行数
for (int x = 1; x <= 4; x++) {
char n = 'A';
// 列数
for (int y = 1; y <= x; y++) {
System.out.print(n++);
}
System.out.println();
}
}
}