流程控制
选择结构(分支语句)
分支语句根据一定的条件有选择地执行或跳过特定的语句
Java分支语句分类
if-else 语句
switch 语句
if-else语句语法格式
if(布尔表达式){ 语句或语句块; } if(布尔表达式) { 语句或语句块; } else if(布尔表达式){ 语句或语句块; }else { 语句或语句块; }
if-else语句应用举例
1 public class TestAge{ 2 public static void main(String args[]){ 3 TestAge t = new TestAge(); 4 t.age(75); 5 } 6 public void age(int age){ 7 if (age< 0) { 8 System.out.println("不可能!"); 9 }else if(age>250){ 10 System.out.println("是个妖怪!"); 11 }else { 12 System.out.println("此人芳龄 " + age); 14 } 15 }
1 //若 age <= 8, 打印 "没上学" 2 //若 age <= 14, 打印出 "小学生" 3 //若 age <= 17, 打印 "初中生" 4 //若 age <= 20, 打印 "高中生" 5 //若 age <= 24, 打印 "大学生" 6 //若都不满足, 打印 "大学毕业" 7 8 int age = 5; 9 10 if(age <= 8) { 11 System.out.println("没上学"); 12 } 13 if(age <= 14) { 14 System.out.println("小学生"); 15 }else if(age <= 17){ 16 System.out.println("初中学"); 17 }else if(age <= 20){ 18 System.out.println("高中生"); 19 }else if(age <= 24){ 20 System.out.println("大学生"); 21 }else{ 22 System.out.println("大学毕业"); 23 }
if语句练习
1、编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
1 System.out.println("请输入三个整数."); 3 Scanner scanner = new Scanner(System.in); 4 5 System.out.print("num1="); 6 int num1 = scanner.nextInt(); 7 8 System.out.print("num2="); 9 int num2 = scanner.nextInt(); 10 11 System.out.print("num3="); 12 int num3 = scanner.nextInt(); 13 14 System.out.println("您输入的三个整数分别为: " + num1 + ", " + num2 + ", " + num3); 15 16 if(num1 <= num2){ 17 if(num3 <= num1){ 18 System.out.println(num3 + ", " + num1 + ", " + num2); 19 }else if(num3 >= num2){ 20 System.out.println(num1 + ", " + num2 + ", " + num3); 21 }else{ 22 System.out.println(num1 + ", " + num3 + ", " + num2); 23 } 25 }else{ 26 if(num3 <= num2){ 27 System.out.println(num3 + ", " + num2 + ", " + num1); 28 }else if(num3 >= num1){ 29 System.out.println(num2 + ", " + num1 + ", " + num3); 30 }else{ 31 System.out.println(num2 + ", " + num3 + ", " + num1); 32 } 33 }
2、对下列代码,若有输出,指出输出结果。
1 int x=2; 2 int y=3; 3 if(x>2) { 4 if(y>2) { 5 int z=x+y; 6 System.out.println("z is " + z); 7 } 8 }else { 9 System.out.println("x is " + x); 10 }
switch语句语法格式
switch(表达式){ case 常量1: 语句1; break; case 常量2: 语句2; break; case 常量N: 语句N; break; [default: 语句; break;] }
switch语句应用举例
1 public class Test{ 2 public static void main(String args[]){ 3 int i = 1; 4 switch (i) { 5 case 0: 6 System.out.println("zero"); 7 break; 8 case 1: 9 System.out.println("one"); 10 //break; 11 default: 12 System.out.println("default"); 13 break; 14 } 15 } 16 }
switch语句有关规则
switch(表达式)中表达式的返回值必须是下述几种类型之一:int, byte, char, short, 枚举, 字符串;
case子句中的值必须是常量,且所有case子句中的值应是不同的;
default子句是任选的;
break语句用来在执行完一个case分支后使程序跳出switch语句块;
switch语句练习
1、使用switch语句改写下列if语句:
1 /* 2 int a = 3; 3 int x = 100; 4 if(a==1) 5 x+=5; 6 else if(a==2) 7 x+=10; 8 else if(a==3) 9 x+=16; 10 else if(a==4) 11 x+=34; 12 */ 13 14 int a = 3; 15 int x = 100; 16 17 switch(a){ 18 case 1: 19 x += 5; 20 break; 21 case 2: 22 x += 10; 23 break; 24 case 3: 25 x += 16; 26 break; 27 case 4: 28 x += 34; 29 break; 30 } 31 System.out.println(x);
2、编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级:
score>=90 等级:A
70=<score<90 等级: B
60=<score<70 等级: C
score<60 等级:D
1 /* 2 编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级: 3 score>=90 等级:A 4 70=<score<90 等级: B 5 60=<score<70 等级: C 6 score<60 等级:D 7 */ 8 Scanner scanner = new Scanner(System.in); 9 System.out.print("请输入学生的学习成绩, score="); 10 int score = scanner.nextInt(); 11 12 switch(score/10){ 13 case 10: 14 case 9: 15 System.out.println("A"); 16 break; 17 18 case 8: 19 case 7: 20 System.out.println("B"); 21 break; 22 23 case 6: 24 System.out.println("C"); 25 break; 26 27 default: 28 System.out.println("D"); 29 }
3、输入 2017 年的某个月份和日期, 例如 month=4, day=21
经过程序计算, 打印出输入的月份和日期是 2017 年的第几天. 31+28+31+21
1 /* 2 * 输入 2017 年的某个月份和日期, 例如 month=4, day=21 3 * 经过程序计算, 打印出输入的月份和日期是 2017 年的第几天. 31+28+31+21 4 */ 5 System.out.print("month:"); 6 int month = scanner.nextInt(); 7 8 System.out.print("day:"); 9 int day = scanner.nextInt(); 10 11 int days = day; 12 13 switch(month - 1) { 14 case 11: 15 days += 30; 16 case 10: 17 days += 31; 18 case 9: 19 days += 30; 20 21 case 8: 22 days += 31; 23 case 7: 24 days += 31; 25 case 6: 26 days += 30; 27 case 5: 28 days += 31; 29 30 case 4: 31 days += 30; 32 case 3: 33 days += 31; 34 case 2: 35 days += 28; 36 case 1: 37 days += 31; 38 } 39 System.out.println(month + "月" + day + "日是 2017 年的第" + days + "天");
循环结构
循环语句功能
在循环条件满足的情况下,反复执行特定代码
循环语句的四个组成部分:
初始化部分(init_statement)
循环条件部分(test_exp)
循环体部分(body_statement)
迭代部分(alter_statement)
循环语句分类
for 循环
while 循环
do/while 循环
for 循环语句
语法格式
for (初始化表达式; 布尔值测试表达式; 更改表达式){
语句或语句块;
}
for循环执行步骤
应用举例
public class ForLoop { public static void main(String args[]){ int result = 0; for(int i=1; i<=100; i++) { result += i; } System.out.println("result=" + result); } }
for语句练习
1、从 1 打印到 100;打印 1-100 之间的所有偶数
1 public class TestFor { 2 public static void main(String [] args) { 3 //从 1 打印到 100 4 /* 5 for(int i = 1; i <= 100; i++) { 6 System.out.println(i); 7 } 8 */ 9 10 //循环的初始化 11 int i = 1; 12 for(;i <= 100;) { 13 System.out.println(i++); 14 } 15 //打印 1-100 之间的所有偶数. 16 for(int j = 1; j <= 100; j++) { 17 if(j % 2 == 0){ 18 System.out.println(j); 19 } 20 } 21 }
2、编写程序FooBizBaz.java,从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。
for(int j = 1; j <= 150; j++){ System.out.print(j); if(j % 3 == 0){ System.out.print(" foo"); } if(j % 5 == 0){ System.out.print(" biz"); } if(j % 7 == 0){ System.out.print(" baz"); } System.out.println(); }
效果:
1
2
3 foo
4
5 biz
6 foo
7 baz
…
15 foo biz
….
105 foo biz baz
…
3、打印 1-100 之间的所有素数素数: 有且仅有两个正约数的整数. 即 2 ~ i-1 之间没有一个是其约数. 例如 2, 3, 5, 7, 11, ...
1 public class sushu { 2 public static void main(String[] args) { 3 //打印 1-100 之间的所有素数 4 //素数: 有且仅有两个正约数的整数. 即 2 ~ i-1 之间没有一个是其约数. 5 //例如 2, 3, 5, 7, 11, ... 6 //标记一个整数是素数. true 表示是一个素数, false 表示不是素数. 7 boolean flag = true; 8 9 long begin = System.currentTimeMillis(); 10 11 for(int i = 2; i <= 100000; i++){ 12 flag = true; 13 14 /** 15 * 16 16 * 17 * 2 8 18 * 3 19 * 4 4 20 * 5 21 * 7 22 * 8 2 23 */ 24 25 //从 2 循环到 i-1, 检验每一个数是否为 i 的约数. 26 for(int j = 2; j <= Math.sqrt(i); j++){ 27 if(i % j == 0){ 28 flag = false; 29 //结束这次循环. 30 break; 31 } 32 } 33 if(flag){ 34 System.out.println(i); 35 } 36 } 37 long end = System.currentTimeMillis(); 38 System.out.println("time: " + (end - begin)); //2194 98 39 }
while 循环语句
语法格式
[初始化语句]
while( 布尔值测试表达式){
语句或语句块;
[更改语句;]
}
应用举例
1 public class WhileLoop { 2 public static void main(String args[]){ 3 int result = 0; 4 int i=1; 5 while(i<=100) { 6 result += i; 7 i++; 8 } 9 System.out.println("result=" + result); 10 } 11 }
do/while 循环语句
语法格式
[初始化语句]
do{
语句或语句块;
[更改语句;]
}while(布尔值测试表达式);
应用举例
1 public class WhileLoop { 2 public static void main(String args[]){ 3 int result = 0, i=1; 4 do{ 5 result += i; 6 i++; 7 }while(i<=100); 8 System.out.println("result=" + result); 9 } 10 }
while、do/while语句练习
int i = 101; while(i <= 100){ System.out.println(i); i++; } //do ... while 一定会执行一次循环体. int j = 101; do{ System.out.println("^^" + j++); }while(j <= 100);
1、编写程序:求1到100之间所有偶数的和。用for和while语句分别完成。
/* 求1到100之间所有偶数的和。用for和while语句分别完成。 */ int total = 0; int m = 1; while(m <= 100){ if(m % 2 == 0){ total += m; } m++; } System.out.println(total);
2、编写程序:从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。
/* 从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束输入。 */ Scanner scanner = new Scanner(System.in); //标记正数的个数 int x = 0; //标记负数的个数 int y = 0; while(true){ int b = scanner.nextInt(); if(b > 0){ x++; }else if(b < 0){ y++; }else{ //退出循环使用 break 语句. break; } } System.out.println("正数: " + x); System.out.println("负数: " + y)
特殊流程控制语句
break 语句
break语句用于终止某个语句块的执行
{ ……
break;
……
}
break 语句用法举例
public class TestBreak{ public static void main(String args[]){ for(int i = 0; i<10; i++){ if(i==3) break; System.out.println(" i =" + i); } System.out.println("Game Over!"); } }
break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
label1: { ……
label2: { ……
label3: { ……
break label2;
……
}
}
}
continue 语句
continue语句用于跳过某个循环语句块的一次执行
continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环
continue语句用法举例
1 public class ContinueTest{ 2 public static void main(String [] args){ 3 4 //continue语句用于跳过某个循环语句块的一次执行 5 for(int i = 1; i <= 100; i++){ 6 if(i % 2 != 0){ 7 //break和continue之后不能有其他的语句, 8 //因为程序永远不会执行break 和 continue之后的语句。 9 continue; 10 System.out.println("test"); 11 } 12 System.out.println(i); 13 } 14 }
特殊流程控制语句说明
break只能用于switch语句和循环语句中。
continue 只能用于循环语句中。
标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
break和continue之后不能有其他的语句,因为程序永远不会执行break 和 continue之后的语句。