文章目录
1、流程控制
1.1 顺序结构
顺序结构就是程序从上到下逐行执行,中间没有任何判断和跳转。如果方法体中的多行代码之间没有流程控制,则程序总是从上向下依次执行,排在前面的代码先执行,排在后面的代码后执行
2、分支结构
2.1 if语句
- 第一种格式:if
if(条件表达式){
语句体;
}
判断条件表达式是true还是false–>true则执行语句体,false则不执行语句体
- 第二种格式:if…else
if(关系表达式) {
语句体1;
}else {
语句体2;
}
# 上式转化成三元运算符形式
# 条件表达式?语句体1:语句体2;
判断条件表达式是true还是false–>true则执行语句体1,false则执行语句体2
- 第三种格式:if…else if…else
if (判断条件1) {
执行语句1;
} else if (判断条件2) {
执行语句2;
}
...
}else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}
判断关系表达式1,为true则执行语句体1,然后结束当前多分支;如果是false,继续判断关系表达式2,直到遇到第一个关系表达式n为true的时候,则执行执行语句n,然后结束当前多分支;如果所有的判断条件都不满足,则执行else中的代码块
- 第四种格式:if…else嵌套
//省略{}的情况,else中嵌套了一个完整的多分支结构,也算是一个语句,称为复合语句,所以也可以省略{}
public static void main(String[] args) {
int score = 89;
if(score<0 || score>100)
System.out.println("你的成绩是错误的");
else
if(score>=90){
System.out.println("你的成绩属于优秀");
}else if(score>=80){
System.out.println("你的成绩属于好");
}else if(score>=70){
System.out.println("你的成绩属于良");
}else if(score>=60){
System.out.println("你的成绩属于及格");
}else {
System.out.println("你的成绩属于不及格");
}
}
2.2 switch选择结构
语法格式
switch(表达式){
case 常量值1:
语句块1;
【break;】
case 常量值2:
语句块2;
【break;】
。。。
//default可有可无,执行了default之后switch分支结构执行结束
【default:
语句块n+1;
//break可有可无,default执行后会直接结束,所以有没有default都可以
【break;】
】
}
执行流程:
①switch(表达式)的值与case后面的某个常量值匹配,就从这个case进入;
②switch(表达式)值与case后面的所有常量值都不匹配,U型你找default分支进入,不关default在哪里
一旦从以上两个入口进入switch,就会顺序往下执行,直到遇到一下出口,即可能发生贯穿
①自然出口:遇到了switch的结束}
②中断出口:遇到了break等
注意:
switch(表达式)的值的类型,只能是4中基本数据类型(byte,short,int,char),两种引用类型(JDK1.5之之后枚举,JDK1.7之后String)
case后面必须是常量值,而且不能重复
public class TestOne {
public static void main(String[] args) {
int month = 5;
switch(month) {
case 1:
case 2:
case 12:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("你输入的月份有误");
break;
}
}
}
3、循环结构
3.1 while循环
while循环适合用于循环次数不确定,先判断后执行。即先判断,后执行循环体,满足循环条件,进入循环体
//第一种情况
while (循环条件语句①) {
循环体语句②;
}
while(true){
循环体语句;//如果此时循环体中没有跳出循环的语句,也是死循环
}
//第二种情况
初始化语句①;
while (循环条件语句②) {
循环体语句③;
迭代语句④;
}
3.2 do…while循环
do-while循环适用于循环次数不确定,先执行后判断。先执行一次循环体,再进行判断。满足条件则继续执行循环体,否则退出循环
//循环体语句至少会执行1次
do {
循环体语句①;
} while (循环条件语句②);
初始化语句①
do {
循环体语句②;
迭代语句③;
} while (循环条件语句④);
3.3 for循环
注意:
(1)for(;;)中的两个;是不能多也不能少
(2)循环条件必须是boolean类型
(3)如果循环条件语句②省略的话,就默认为循环条件成立
for(初始化语句①; 循环条件语句②; 迭代语句④){
循环体语句③
}
for(;;){
循环体语句块;//如果循环体中没有跳出循环体的语句,那么就是死循环
}
/*
执行步骤
1、执行初始化语句①,完成循环变量初始化,初始化语句也可以写在外面
2、执行循环条件语句②,看循环条件语句是true还是false
true则执行第三步
false则退出for循环
3、执行循环体语句③
4、执行迭代语句④,针对循环变量重新赋值
5、根据循环变量的新值,重新从第二步开始再执行一次
*/
3.4 循环语句的区别
- 从循环次数角度分析
- do…while循环至少执行一次循环体语句
- for和while循环先循环条件语句是否成立,然后决定是否执行循环体,至少执行零次循环体语句
- 从循环变量的生命周期角度分析
- for循环的循环变量在for()中声明的,在循环语句结束后,不可以被访问;
- while和do…while循环的循环变量因为在外面声明的,所以while和do…while结束后可以被继续使用的;
- 如何选择
- 遍历有明显的循环次数(范围)的需求,选择for循环
- 遍历没有明显的循环次数(范围)的需求,循环while循环
- 如果循环体语句块至少执行一次,可以考虑使用do…while循环
-4.本质上:三种循环之间是可以互相转换的,都能实现循环的功能
- 三种循环结构都具有四要素:
(1)循环变量的初始化表达式
(2)循环条件
(3)循环变量的修改的迭代表达式
(4)循环体语句块
4、控制语句break和continue
- break使用场景:终止switch或者当前循环
- 在选择结构switch语句中
- 在循环语句中
- 离开使用场景的存在是没有意义的
- continue使用场景:结束本次循环,继续下一次的循环
5、循环嵌套
/*
1
22
333
4444
55555
*/
public static void main(String[] args){
for(int i=1; i<=5; i++){
//内循环控制每一行打印的数字
/*
当i=1,外循环第1次,第1行,1, 1个i,j=1
当i=2,外循环第2次,第2行,22 2个i,j=1,2
当i=3,外循环第3次,第3行,333 3个i,j=1,2,3
当i=4,外循环第4次,第4行,4444 4个i,j=1,2,3,4
当i=5,外循环第5次,第5行,55555 5个i,j=1,2,3,4,5
说明,打印的是i的值,打印几个i
j=1,j<=i
*/
for(int j=1; j<=i; j++){
System.out.print(i);
}
System.out.println();
}
}
练习1:打印九九乘法表
public class TestOne {
public static void main(String[] args) {
/**
* 打印九九乘法表
* */
for (int i = 1; i < 10; i++) {
for(int j=1;j<=i;j++) {
System.out.print(j + "*" + i + "=" + i * j + "\t");
}
System.out.println();
}
}
}
练习2:打印直角三角形
public class TestOne {
public static void main(String[] args) {
/**
* 打印直角三角形
* */
for (int i = 1; i <= rows; i++) {
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
练习3:打印等腰直角三角形
public class TestOne {
public static void main(String[] args) {
/**
* 打印等腰三角形
* */
for (int i = 1; i <= rows; i++) {
for(int j=rows;j>=i;j--){
System.out.print(" ");
}
for(int j=1;j<=(2*i-1);j++){
System.out.print("*");
}
System.out.println();
}
}
}
练习4:打印菱形
public class TestOne {
public static void main(String[] args) {
/**
* 打印菱形
* */
for (int i = 1; i <= rows; i++) {
for(int j=rows;j>=i;j--){
System.out.print(" ");
}
for(int j=1;j<=(2*i-1);j++){
System.out.print("*");
}
System.out.println();
}
for (int i = 1; i <rows; i++) {
for(int j=i+1;j>=1;j--){
System.out.print(" ");
}
for(int j=2*(rows-i)-1;j>=1;j--){
System.out.print("*");
}
System.out.println();
}
}
}
完整代码
public class TestOne {
public static void main(String[] args) {
nineNineMultiCal();
rightTriangle(5);
isoscelesTriangle(5);
diamond(5);
}
public static void nineNineMultiCal(){
/**
* 打印九九乘法表
* */
for (int i = 1; i < 10; i++) {
for(int j=1;j<=i;j++) {
System.out.print(j + "*" + i + "=" + i * j + "\t");
}
System.out.println();
}
}
public static void rightTriangle(int rows){
/**
* 打印直角三角形
* */
for (int i = 1; i <= rows; i++) {
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
public static void isoscelesTriangle(int rows){
/**
* 打印等腰三角形
* */
for (int i = 1; i <= rows; i++) {
for(int j=rows;j>=i;j--){
System.out.print(" ");
}
for(int j=1;j<=(2*i-1);j++){
System.out.print("*");
}
System.out.println();
}
}
public static void diamond(int rows){
/**
* 打印菱形
* */
for (int i = 1; i <= rows; i++) {
for(int j=rows;j>=i;j--){
System.out.print(" ");
}
for(int j=1;j<=(2*i-1);j++){
System.out.print("*");
}
System.out.println();
}
for (int i = 1; i <rows; i++) {
for(int j=i+1;j>=1;j--){
System.out.print(" ");
}
for(int j=2*(rows-i)-1;j>=1;j--){
System.out.print("*");
}
System.out.println();
}
}
}