JAVA流程控制详解-含练习题

JAVA学习-02-韩顺平老师

JAVA流程控制详解-含练习题

  • 分支控制
    • 单分支

      /*
      基本语法
      if (条件表达式) {
      	if语句块
      }
      */
      int a = 10;
      if ( a > 8 ) {
      	System.out.println("进入了if语句块");
      }
      
    • 双分支

      	/*
      基本语法
      if (条件表达式) {
      	if语句块
      } else {
      	else语句块
      }
      */
      int a = 10;
      if ( a > 8 ) {
      	System.out.println("进入了if语句块");
      } else {
      	System.out.println("进入了else语句块");
      }
      
    • 多分支

      	/*
      基本语法
      if (条件表达式) {
      	if语句块
      } else if {
      	else if 语句块
      } else {
      	else语句块
      }
      */
      int a = 10;
      if ( a > 8 && a <= 10) {
      	System.out.println("进入了if语句块");
      } else if (a >= 10 && a <= 12) {
      	System.out.println("进入了else if 语句块");
      } else {
      	System.out.println('进入了else语句块');
      }
      
    • 嵌套分支

      • 在分支语句中还含有分支语句
      	/*
      基本语法
      if (条件表达式) {
      	if () {
      
      	} else {
      
      	}
      } else {
      	else语句块
      }
      */
      int a = 10;
      int b = 100;
      if ( a > 8 && a <= 10) {
      	if( b > 77 ) {
      		System.out.println('b大于77');
      	} else {
      		System.out.println('b小于77');
      	}
      } else {
      	System.out.println('进入了else语句块');
      }
      
    • switch语句

      • 基本语法
      /*switch(表达式){
      	case 表达式常量1:
              	语句1;
             	[ break;]    // [ ] 表示可选
       	case 表达式常量2:
              	语句2;
              	[ break;]
               	......
      	case 表达式常量n:
              	语句n;
             	[ break;]
      	[default:语句n+1;]
      
      }
      
      */
      // 输出今天是今年的第几天
      import java.util.Scanner;
      public class test_3 {
      public static void main(String[] args) {
      	int sumDays = 0;
      	Scanner scan = new Scanner(System.in);
      	System.out.println("请输入年份:");
      	int year = scan.nextInt();
      	System.out.println("请输入月:(1-12)");
      	int mouth = scan.nextInt();
      	System.out.println("请输入日:(1-31)");
      	// 输入一个整型天数
      	int day = scan.nextInt();
      	switch (mouth){
      	case 12:
      		sumDays += 30;
      	case 11:
      		sumDays += 31;
      	case 10:
      		sumDays += 30;
      	case 9:
      		sumDays += 31;
      	case 8:
      		sumDays += 31;
      	case 7:
      		sumDays += 30;
      	case 6:
      		sumDays += 31;//6月24日 31+29+31+30+31+24
      	case 5:
      		sumDays += 30;
      	case 4:
      		sumDays += 31;
      	case 3:
      		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
      			sumDays += 29;
      		}else {
      			sumDays += 28;
      		}
      		//sumDays += 29;
      	case 2:
      		sumDays += 31;
      	case 1:
      		sumDays += day;
      	System.out.println(year + "年" + mouth + "月" + day + "日是" + year +"年的第" +sumDays + "天");
      		
      	}
      }
      }
      
      • 注意细节
        • 1.表示式的数据类型应和case的数据类型一致或者是可以自动转换成可以比较的类型
        • 2.表达式中的返回值类型必须是(byte,short,char,int,enum,String)
        • 3.case的值必须是常量
        • 4.default是可选的
        • 5.当满足一个case时,如果没有break,则会直接执行下一个case,不会进行判断,直到遇到break,才会退出
      • 练习
    import java.util.Scanner;
    public class SwitchExercise{
    
    	public static void main(String[] args) {
    		// 判断季节 (采用穿透的性质)
    		System.out.println("请输入1-12月:");
    		Scanner myScanner = new Scanner(System.in);
    		int month = myScanner.nextInt();
    		switch(month){
    			case 3:
    			case 4:
    			case 5:
    			System.out.println(month + "月是春季");
    			break;//必须要有一个break来终止穿刺
    			case 6:
    			case 7:
    			case 8:
    			System.out.println(month + "月是夏季");
    			break;
    			case 9:
    			case 10:
    			case 11:
    			System.out.println(month + "月是秋季");
    			break;
    			case 1:
    			case 2:
    			case 12:
    			System.out.println(month + "月是冬季");
    			break;
    			default:
    			System.out.println("请输入正确的月份");
    			break;
    		}
    	}
    }
    	```
    
  • 循环控制
    • for循环

      • 简单循环
      public class forExercise {
      	public static void main(String[] args) {
      				/*
      				基本语法
      				for(初始化语句;循环条件语句;控制条件语句) {
      					循环体语句
      				}
      				*/
      				for(int i = 1; i <= 3; i++ ) {
      					System.out.println("我爱写代码");
      				}
      	}
      }
      
      
      • 嵌套循环
        • 内层循环是外层循环的循环体语句
      public class forExercise {
      	public static void main(String[] args) {
      		/*
      		基本语法
      		for(初始化语句;循环条件语句;控制条件语句) {
      			循环体语句
      		}
      		*/
      		for(int i = 1; i <= 3; i++ ) {
      
      			for(int j = 1; j <= 2; j++) {
      				System.out.println("我爱写代码");
      			}
      		}
      	}
      }
      
      • 练习题
      import java.util.Scanner; // 导入类
      public class MulForExercise {
      	public static void main(String[] args) {
      		/* 1.统计2个班的情况,每个班有3个同学
      		   - 求出各班的平均分和所有班级的平均分
      		   - 统计及格人数
      		*/
      		 Scanner myScanner = new Scanner(System.in);
      		 int classNum = 2;
      		 int stuNum = 3;
      		 double allScore = 0; // 所有总分
      		 int passNum = 0; // 统计及格人数
      		 for(int i = 1; i <= classNum; i++) {
      		 	double totalScore = 0; // 统计每个班的总分
      		 	for(int j = 1; j <= stuNum; j++) {
      		 		System.out.print("请输入" + i + "班" + j + "个同学的成绩:");
      		 		int socre = myScanner.nextInt();
      		 		totalScore += socre;
      		 		allScore += socre;
      		 		if( socre >= 60 ) {
      		 			passNum += 1;
      		 		}
      		 	}
      		 	System.out.println(i + "班的平均分为:" + (int)(totalScore/stuNum));
      		 }
      		 System.out.println("总分数为:" + allScore + "总平均分为" + (allScore/(stuNum*classNum)));
               // 2.打印九九乘法表
      			for(int i = 1; i <= 9; i++) {
      
      				for(int j = 1; j <= i; j++) {
      					System.out.print(i + "x" + j + "\t");
      				} 
      				System.out.println(""); // 换行
      			}
      		}
      	}
      
    • while循环

      • 基本语法
      /*
      while(条件表达式){
      	循环体语句
      	条件控制语句
      }
      */
      int num = 1;
      while(num < 10) {
      	System.out.println("num=" + num);
      	num ++;
      }
      
      • 注意细节
        • 条件表达式必须要能够返回一个boolean类型的值
        • while必须要有条件控制语句,不然会形成死循环
    • dowhile循环

      • 基本语法
      /*
      do {
      	循环体语句
      	条件控制语句
      } while(条件表达式)
      */
      int num = 1;
      do {
      	System.out.println("num=" + num);
      	num ++;
      } while(num < 10);
      
      • 注意事项
        • 条件表达式必须要能够返回一个boolean类型的值
        • dowhile语句,循环体一定会被执行一次
    • braek、continue、return控制语句

      • break
        • break 用于中断此次的循环,直接跳循环,但是不退出程序
        • 一般用于 while、for、dowhile、switch
      • continue
        • continue 用于跳过此次循环,直接进入下一循环,也不退出程序
        • 一般用于 while、for、dowhile、switch
      • return
        • return 用于退出程序,直接结束程序的执行,循环后的代码不再执行
      • 三者的异同点
        • continue、break 两者都不会退出程序,循环后的代码仍可以执行
        • continue、break 可以通过标签 label 来指定跳出哪一级循环
        public class forExercise {
        	public static void main(String[] args) {
        		/*
        		基本语法
        		for(初始化语句;循环条件语句;控制条件语句) {
        			循环体语句
        		}
        		*/
        		label1:
        		for(int i = 1; i <= 3; i++ ) {
        
        			label2:
        			for(int j = 1; j <= 2; j++) {
        				System.out.println("我爱写代码");
        				if(j == 2) {
        					// break; // 默认是跳出内层循环
        					break label1 // 跳出外层循环
        				}
        			}
        		}
        	}
        }
        
    • 流程控制作业

    public class ControlProcessExercise {
    	public static void main(String[] args) {
    		/*
    		某人有100000元,经过一个路口,需要缴费:
    		1.当现金>50000元时,每次交5%
    		2.当现金<=50000元时,每次交1000
    		可以经过多少次路口?
    		*/
    		int money = 100000;
    		int times = 0;
    		while(money > 0) {
    			if( money >50000 ) {
    				money -= money * 0.05;
    				times +=1;
    			} else if (money <= 50000 && money >= 1000) {
    				money -=1000;
    				times +=1;
    			} else{
    				break;
    			}
    		}
    		System.out.println("可以经过" + times + "次路口");
            // 二、判断一个整数是不是水鲜花数
    		System.out.print("请输入一个整数:");
    		int num = myScanner.nextInt();
    		int verification = num;//保存num 后面用来验证是否想的
    		int total = 0;
    		while(num >0) {
    			int remainder = num % 10;
    			total += remainder*remainder*remainder;
    			num = num / 10;
    		}
    		if( total == verification) {
    			System.out.println(verification + "这个数是水仙花数");
    		} else {
    			System.out.println(verification + "这个数不是水仙花数");
    		}
    
    		// 三、输出1-100之间的不能被5整除的数,每五行一个
    		int count = 0; // 用来控制换行
    		for (int i =1; i<=100; i++) {
    			if(i % 5 == 0) {
    				continue;
    			} else {
    				System.out.print(i + "\t");
    				count ++;
    				if(count == 5){
    					System.out.println("");
    					count = 0;
    				}
    			}
    		}
            // 四、 1-1/2+1/3+1/4....1/100 的和
    		double total = 0;
    		// 注意初始化定义,1/(double)i
    		for(double i = 1; i <= 100; i++) {
    			if(i % 2 == 0) {
    				total -= (1 / i);
    			} else {
    				total += (1 / i);
    			}
    		}
    		System.out.println(total); // 0.688172179310195
    
    		// 五、计算 1 + (1+2) + (1+2+3) + ... + (1+...+100)
    		int total = 0;
    		for (int i = 1; i <= 100; i++) {
    			
    			for(int j = 1; j <= i; j++) {
    				total += j;
    			}
    		}
    		System.out.println(total);// 171700
            		/*
    		六、打印空心等腰三角形
    		    *
    		   * *
    		  *   *
    		 *     *
    		*********
    		*/
    		int starLevel = 10;
    		// 控制打印行数
    		for(int i = 1; i <= starLevel; i++) {
    			for(int k = starLevel-i; k >0; k--) {
    				System.out.print(" ");
    			}
    			// 控制打印个数
    			for(int j = 1; j <= 2*i - 1; j++) {
    
    				// 如果是 第一个或是最后一个打印星星,或者最后一行打印星星
    				if(j == 1 || j == 2*i - 1 || i == starLevel) {
    					System.out.print("*");
    				} else {
    					System.out.print(" ");
    				}
    			}
    			System.out.println(""); // 换行
    		}
    	}
    }
    ```
    

自己的小总结,如出现错误希望大家纠正交流学习!

上一篇:jmeter在windows的安装以及环境配置(在dos窗口启动jmeter)


下一篇:C++打印当前时间(chrono)