流程控制
选择结构(分支语句)
分支语句根据一定的条件有选择地执行或跳过特定的语句
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;] }
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=<90 等级: B 5 60= <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+211 /* 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 }
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
23 foo45 biz6 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 * 1616 * 17 * 2 818 * 319 * 4 420 * 5 21 * 722 * 8 223 */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 9839 }
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到100之间所有偶数的和。用for和while语句分别完成。 */ int total = 0; int m = 1; while(m <= 100){ if(m % 2 == 0){ total += m; } m++; } System.out.println(total);
/*从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为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之后的语句。