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("我爱写代码");
    			}
    		}
    	}
    }
    		```
    	* **练习题**
    	```java
    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(条件表达式){
    	循环体语句z
    	条件控制语句
    }
    */
    int num = 1;
    while(num < 10) {
    	System.out.println("num=" + num);
    	num ++;
    }
    	```
    	* 注意细节
    		- 条件表达式必须要能够返回一个boolean类型的值
    		- while必须要有条件控制语句,不然会形成死循环
    + **dowhile循环**
    	* 基本语法
    	```java
    		/*
    do {
    	循环体语句
    	条件控制语句
    } while(条件表达式)
    */
    int num = 1;
    do {
    	System.out.println("num=" + num);
    	num ++;
    } while(num < 10);
    	```
    	* 注意事项
    		- 条件表达式必须要能够返回一个boolean类型的值
    		- dowhile语句,循环体一定会被执行一次
    + **braek、continuereturn控制语句**
    	* **break**
    		- break 用于中断此次的循环,直接跳循环,但是不退出程序
    		- 一般用于 whilefor、dowhile、switch
    	* **continue**
    		- continue 用于跳过此次循环,直接进入下一循环,也不退出程序
    		- 一般用于 whilefor、dowhile、switch
    	* **return**
    		- return 用于退出程序,直接结束程序的执行,循环后的代码不再执行
    	* 三者的异同点
    		- continuebreak 两者都不会退出程序,循环后的代码仍可以执行
    		- continuebreak 可以通过标签 label 来指定跳出哪一级循环
    
    ```java
    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(""); // 换行
    		}
    	}
    }
    

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

你可能感兴趣的:(Java,java,开发语言,后端)