顺序控制
程序从上到下逐行地执行,中间没有任何判断和跳转。
顺序控制举例和注意事项:Java中定义变量时采用合法的前向引用。
//正确形式 public class Test{ int num1=12; int num2=num1+2; } //错误形式: public class Test{ int num2=num1+2;//错误 int num1=12; }
分支控制
1.单分支 if:
1.1基本语法:
if(条件表达式){ 执行代码块;(可以有多条语句.) }
1.2案例:
//编写一个程序,可以输入人的年龄,如果该同志的年龄大于 18 岁, //则输出 "你年龄大于 18,要对自己的行为负责,送入监狱" import java.util.Scanner;//导入 public class If { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in); System.out.println("请输入年龄"); int age = myScanner.nextInt(); if(age > 18) { System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱"); } System.out.println("单分支if程序结束..."); } }
1.3单分支if的说明:
(1)当条件表达式为true时,就会执行{}的代码。如果为false,就不执行。
(2)如果{}中只有一条语句,则可以不用{},建议写上{}
2.双分支 if-else:
2.1基本语法:
if(条件表达式){ 执行代码块; } else{ 执行代码块2; }
2.2案例:
//编写一个程序,可以输入人的年龄,如果该同志的年龄大于 18 岁, //则输出 "你年龄大于 18,要对 //自己的行为负责, 送入监狱"。否则 ,输出"你的年龄不大这次放过你了." import java.util.Scanner;//导入 public class IfElse { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in); System.out.println("请输入年龄"); int age int age = myScanner.nextInt(); if(age > 18) { System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱"); } else {//双分支 System.out.println("你的年龄不大这次放过你了"); } System.out.println("程序继续..."); } }
2.3双分支if-else的说明:
当条件表达式为成立,就会执行代码块1,否则执行代码块2。如果执行代码块中只有一条语句,则{}可以省略,否则,不能省略。
3.多分支 if-else if -....-else:
3.1基本语法:
if(条件表达式1){ 执行代码块1; } else if(条件表达式2){ 执行代码块2; } ...... else{ 执行代码块n; }
3.2案例:
/* 输入保国同志的芝麻信用分: 如果: 信用分为 100 分时,输出 信用极好; 信用分为(80,99]时,输出 信用优秀; 信用分为[60,80]时,输出 信用一般; 其它情况 ,输出 信用 不及格 请从键盘输入保国的芝麻信用分,并加以判断 假定信用分数为 int */ import java.util.Scanner; public class IfelseMore { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in);//接收用户输入 System.out.println("请输入信用分(1-100):"); int grade = myScanner.nextInt(); //先对输入的信用分,进行一个范围的有效判断 1-100, 否则提示输入错误 if(grade >=1 && grade <= 100) { //因为有 4 种情况,所以使用多分支 if(grade == 100) { System.out.println("信用极好"); } else if (grade > 80 && grade <= 99) { //信用分为(80,99]时,输出 信用优秀; System.out.println("信用优秀"); } else if (grade >= 60 && grade <= 80) {//信用分为[60,80]时,输出 信用一般 System.out.println("信用一般"); } else {//其它情况 ,输出 信用 不及格 System.out.println("信用不及格"); } } else { System.out.println("信用分需要在 1-100,请重新输入:)"); } } }
3.3多分支的说明:
(1)多分支可以没有else,如果所有条件表达式都不成立,则一个执行入口都没有
(2)如果有else,如果里面所有条件表达式都不成立,则默认执行else代码块。
4.嵌套分支
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外 层分支。建议: 不要超过 3 层 (可读性不好)
4.1基本语法:
if(){ if(){ //if-else... }else{ //if-else... } }
4.2案例:
/* 参加歌手比赛,如果初赛成绩大于 8.0 进入决赛, 否则提示淘汰。并且根据性别提示进入男子组或女子组。输入成绩和性别,进行判断和输出信息。 提示: double score; char gender; 接收字符: char gender =scanner.next().charAt(0) */ import java.util.Scanner; public class NestedIf { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in); System.out.println("请输入该歌手的成绩"); double score=myScanner.nextDouble(); if( score > 8.0 ) { System.out.println("请输入性别"); char gender = myScanner.next().charAt(0); if( gender == '男' ) { System.out.println("进入男子组"); } else if(gender == '女') { System.out.println("进入女子组"); } else { System.out.println("你的性别有误,不能参加决赛~"); } } else { System.out.println("sorry ,你被淘汰了~"); } } }
5.switch 分支结构
5.1基本语法:
switch(表达式){ case 常量1: //当... 语句块1; break; case 常量2; 语句块2; break; ... case 常量n; 语句块n; break; default: default语句块; break; }
5.2案例
/* 请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g a 表示星期一,b 表示星期二 … 根据用户的输入显示相应的信息.要求使用 switch 语句完成 */ import java.util.Scanner; public class Switch01 { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in); System.out.println("请输入一个字符(a-g)"); char c1 = myScanner.next().charAt(0); switch(c1) { case 'a' : System.out.println("今天星期一,猴子穿新衣"); break; case 'b' : System.out.println("今天星期二,猴子当小二"); break; case 'c' : System.out.println("今天星期三,猴子爬雪山.."); break; default: System.out.println("你输入的字符不正确,没有匹配的"); } System.out.println("退出了 switch ,继续执行程序"); } }
5.3Switch特别说明及注意事项:
(1)switch关键字,表示switch分支
(2)表达式对应一个值
(3)case 常量1:当表达式的值等于常量1,就执行 语句块1
(4)break:表示退出switch
(5)如果和case 常量1 匹配,就执行语句块1,如果没有匹配case 常量2
(6)如果一个都没有匹配上,执行default
(7)表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int
(8)switch(表达式)中表达式的返回值必须是:(byte、short、int、char、enum[枚举]、String)
double c = 1.1; switch(c){//错误 case 1.1://错误 System.out.println("ok3"); break;
(9)case子句中的值必须是常量(1,'a')或者常量表达式,而不能是变量
(10)default子句是可选的,当没有匹配的case时,执行default。如果没有default子句,又没有匹配任何常量,则没有输出
(11)break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾,除非遇到break;
6.switch和if的区别:
(1)如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。虽然两个语句都可 以使用,建议使用 swtich 语句。
(2)其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广
循环控制
1.for循环控制
1.1基本语法:
for(循环变量初始化;循环条件;循环变量迭代){ 循环操作(可以多条语句); }
1.2案例:
//打印 1~100 之间所有是 9 的倍数的整数,统计个数及 总和. public class ForExercise { public static void main(String[] args) { int count = 0; //统计 9 的倍数个数 变量 int sum = 0; //总和 int start = 10; int end = 200; int t = 5; // 倍数 for(int i = start; i <= end; i++) { if( i % t == 0) { System.out.println("i=" + i); count++; sum += i;//累积 } } System.out.println("count=" + count); System.out.println("sum=" + sum); } }
1.3for循环特别说明和注意事项:
(1)for 关键字,表示循环控制
(2)for 有四要素: ①循环变量初始化②循环条件③循环操作④循环变量迭代
(3)循环操作 , 这里可以有多条语句,也就是我们要循环执行的代码
(4)如果 循环操作(语句) 只有一条语句,可以省略 {}, 建议不要省略
(5)循环条件是返回一个布尔值的表达式
(6)for(;循环判断条件;) 中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略。
(7)循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
2.while循环控制
2.1基本语法:
循环变量初始化; while(循环条件){ 循环体(语句); 循环变量迭代; }
2.2案例:
// 打印 1—100 之间所有能被 3 整除的数 [使用 while, ] public class WhileExercise { public static void main(String[] args) { int i = 1; int endNum = 100; while( i <= endNum) { if( i % 3 == 0) { System.out.println("i=" + i); } } } }
2.3while循环特别说明和注意事项:
(1)while循环也有四要素
(2)只是四要素放的位置和for不一样
(3)循环条件是返回一个布尔值的表达式
(4)while 循环是先判断再执行语句
3.do..while循环控制
3.1基本语法:
循环变量初始化; do{ 循环体(语句); 循环变量迭代; }while(循环条件);
3.2案例:
//统计 1---200 之间能被 5 整除但不能被 3 整除的 个数 public class DoWhileExercise01 { public static void main(String[] args) { int i = 1; int count = 0; //统计满足条件的个数 do { if( i % 5 == 0 && i % 3 != 0 ) { System.out.println("i=" + i); count++; } i++; }while(i <= 200); System.out.println("count=" + count); } }
3.3do...while循环特别说明和注意事项:
(1)循环条件是返回一个布尔值的表达式
(2)do..while 循环是先执行,再判断, 因此它至少执行一次
4.跳转控制语句-break
break 语句用于终止某个语句块的执行,一般使用在 switch 或者循环[for , while , do-while]中
4.1基本语法:
{ ...... break; ...... }
4.2案例:
//1-100 以内的数求和,求出 当和 第一次大于 20 的当前数 【for + break】 public class BreakExercise { public static void main(String[] args) { int sum = 0; //累积和 //注意 i 的作用范围在 for{} int n = 0; for(int i = 1; i <= 100; i++) { sum += i;//累积 if(sum > 20) { System.out.println("和>20 时候 当前数 i=" + i); n = i; break; } } System.out.println("当前数=" + n); } }
4.3跳转控制语句-break的特别说明和注意事项
1.break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一句语句块。
2.标签的基本使用
label1:{ ......
label2: { ......
label3: { ......
break;
......
}
}
}
解读:
(1)break语句可以指定退出哪层
(2)label1是标签,名字由程序员指定。
(3)break后指定到哪个label就退出到哪里
(4)在实际的开发中,尽量不要使用标签
(5)如果没有指定break,默认退出最近的循环体
5.跳转控制语句-continue
5.1基本语法:
{ …… continue; …… }
5.2案例:
public class Continue { public static void main(String[] args) { int i = 1; while( i <= 4) { i++; if( i == 2) { continue; } System.out.println("i=" + i); } } }
5.3跳转控制语句-continue的特别说明和注意事项
(1)continue 语句用于结束本次循环,继续执行下一次循环。
(2) continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环 , 这个和前面的标签的 使用的规则一样.
6.跳转控制语句-return
return 使用在方法,表示跳出所在的方法,在讲解方法的时候,会详细的介绍,这里我们简单的提一下。
注意:如果 return 写在 main 方法,退出程序
6.1案例:
for(int i=1;i<=5;i++){ if(i==3){ System.out.println("Hello World"+i); return; } System.out.println("你好,世界!"); } System.out.println("go on..");