• Java 5. 语法结构


    顺序结构
    分支结构
    • 单分支if
    1. 先看一个if的例子
    //lib提供好的类库 Scanner引用类型,开发者给我们提供好的一个类文件 Scanner.java
    import java.util.Scanner;
    
    public class Test{
    	public static void main(String[] args){
    		Scanner input = new Scanner(System.in); //Scanner 是引用类型,基本类型才能赋值,引用类型要new
    		System.out.println("请输入一个数字:");
    		int day = input.nextInt(); //可以读取我们输入的文字,读字符串input.nextLine()
    		if(day == 1){
    			System.out.println("Monday");
    		}else if(day == 2){
    			System.out.println("Tuesday");
    		}else if(day == 3){
    			System.out.println("Wednesday");
    		}else if(day == 4){
    			System.out.println("Thursday");
    		}else if(day == 5){
    			System.out.println("Friday");
    		}else if(day == 6){
    			System.out.println("Saturday");
    		}else if(day == 7){
    			System.out.println("Sunday");
    		}else{
    			System.out.println("请输入1-7的整数!");
    		}
    	}
    }
    
    
    • cmd下运行报错:【错误: 编码GBK的不可映射字符】

      • 解决办法:在notepad++打开,点击菜单栏的编码->使用ANSI编码
    • java.util.InputMismatchException

      • 输入的类型与接收的数据类型不一致
    1. /利用if语句实现,判断给定月份对应的季节
    import java.util.Scanner; //rt.jar
    
    public class Jijie{
    	public static void main(String[] args){
    		Scanner input = new Scanner(System.in);
    		System.out.println("请输入一个数字:");
    		int day = input.nextInt();
    		System.out.println();
    		if(day == 12 | day == 1 | day == 2){
    			System.out.println("现在是冬天");
    		}else if(day >= 3 && day <= 5){
    			System.out.println("现在是春天");
    		}else if(day >= 6 | && day <= 8){
    			System.out.println("现在是夏天");
    		}else if(day >= 9 && day <= 11){
    			System.out.println("现在是秋天");
    		}else{
    			System.out.println("请输入1-12的整数!");
    		}			
    	}
    }
    
    1. 利用if实现一个随机摇骰子的小游戏

      1. 随机产生一个骰子点数 1-6

      2. 让玩家猜测大小 大 小

      3. 比较点数与猜测结果

        ​ - 点数1 2 3同时小 或者 点数4 5 6 同时大

    //import java.lang.Math;  //lang包可以省略不写
    import java.util.Scanner;
    
    public class DiceGame{
    	public static void main(String[] args){
    		double value = Math.random(); //[0.0,1.0)  -- 0.0-0.9999
    		int num = (int)(value*6+1);
    		System.out.println(num);
    		Scanner input = new Scanner(System.in);
    		System.out.println("买大买小,买定离手!");
    		String choose = input.nextLine();
    		System.out.println("本次摇出的点数为:"+num);
    		if((num >= 1 && num <=3 && choose.equals("小")) || (num >3 && num<=6 && choose.equals("大"))){
    			System.out.println("猜对了!");
    		}else{
    			System.out.println("猜错了!");
    		}
    	}
    }
    字符串之间的比较不能"a"=="b" ,需要这样写:"a".equals("b")
    
    • 多分支switch
      1. examp1:
    import java.util.Scanner;
    
    public class TestSwitch{
    	public static void main(String[] args){
    		Scanner input = new Scanner(System.in);
    		System.out.println("请输入:");
    		int day = input.nextInt();
            // switch(值) byte,short,int,char emnum,String		
            switch(day){
    			case 1:
    				System.out.println("Monday");
    				break;
    			case 2:
    				System.out.println("Tuesday");
    				break;
    			default:
    				System.out.println("error");
    				break;
    		}				
    	}
    }
    
    1. examp2: 利switch实现 判断学生成绩对应的区间

      import java.util.Scanner;
      
      public class Switch123{
      	public static void main(String[] args){
      		Scanner input = new Scanner(System.in);
      		System.out.println("请输入你的分数:");
      		int score = input.nextInt();
      		switch(score/10){
      			case 0:
      			case 1:
      			case 2:
      			case 3:
      			case 4:
      			case 5:
      				System.out.println("挂啦!");
      				break;
      			case 6:
      				System.out.println("欧耶 过啦!");
      				break;
      			case 7:
      				System.out.println("一般般吧!");
      				break;
      			case 8:
      				System.out.println("比较好啦!");
      				break;
      			case 9:
      				System.out.println("优秀啊!");
      				break;
      			case 10:
      				if(score == 100){
      					System.out.println("学霸本霸!");
      					break;
      				}		
      			default:
      				System.out.println("输入错误!");
      		}
      	}
      }
      
      1. examp3:

        /*
        利用Scanner输入一个值(值代表一个星期几)
        ​	为小明同学制定一个学习计划
        ​	1 3 5 学校语文
        ​	2 4 6 学习数学
        ​	7        出去玩耍
        */
        import java.util.Scanner;
        
        public class Switch456{
        	public static void main(String[] args){
        		Scanner input = new Scanner(System.in);
        		System.out.println("请输入一个1-7的数字:");
        		int day = input.nextInt();  //输入非int类型就会报错java.util.InputMismatchException
        		switch(day){
        			case 1:
        			case 3:
        			case 5:
        				System.out.println("学习java!");
        				break;
        			case 2:
        			case 4:
        			case 6:
        				System.out.println("学习python!");
        				break;
        			case 7:
        				System.out.println("玩? 想得美");
        				break;
        			default:
        				System.out.println("你逃不掉1-7天的");
        		}
        	}
        }
        
    • if和switch的优缺点
    好处 缺点
    if 可以写复杂的逻辑 执行比较慢
    switch 判断的过程效率更高 只能做恒等比较(==),固定值
    循环结构
    • for

      1. 栗子1
      操场有一百多人,让他们排队,
      三个人一组多一个,四个人一组多两个,五个人一组多两
      求操场上的人数是多少? 设为n
      */
      public class TestFor{
      	public static void main(String[] args){
      		for(int n=100;n<200;n++){
      			if(n%3==1 && n%4==2 && n%5==2){
      				System.out.println("操场上的人数为:"+n);
      			}			
      		}
      	}
      }
      
      
      
      1. 栗子2
      /*
      甲乙丙丁四个人加工零件  加工的总零件数为370个
      如果甲加工的零件数多10   
      如果乙加工的零件数少20
      如果丙加工的零件数乘以2
      如果丁加工的零件数除以2
      则四个人加工的零件数就相等啦
      求 四个人加工的零件个数分别是多少?
      设甲乙丙丁相等时的数是x
      那么甲x-10 + 乙x+20 + 丙x/2 + 丁x*2 ==370
              x       x       0       2x
      优化:甲乙可以理解为都在x附近浮动,丁为2x,丙是最小的,
      我们先缩小下上限,假设丙为0,4x=370,x大概95这样,丙是最小的,95除以2大概45这样,所以for循环范围可以定位45-95就好了
      */
      public class Lianxiti1{
      	public static void main(String[] args){
      		for(int x=45;x<95;x++){
      			if((x-10)+(x+20)+(x/2)+(x*2) == 370){
      				System.out.println("甲加工的零件个数是:"+(x-10));
      				System.out.println("乙工的零件个数是:"+(x+20));
      				System.out.println("丙加工的零件个数是:"+(x/2));
      				System.out.println("丁加工的零件个数是:"+(x*2));
      			}			
      		}
      	}
      }
      
      1. 栗子3
      /*
      鸡兔同笼问题
      小鸡 小兔子 关在同一个笼  小鸡两  小兔子四只脚
      小鸡+小兔子  总数50只  脚的总数160只
      求小鸡 和 小兔子 各多少只?
      小鸡x, 小兔子50-x
      2*x+(50-x)*4 == 160
      
      */
      public class Jitutonglong{
      	public static void main(String[] args){
      		for(int x=1;x<50;x++){
      			if(2*x+(50-x)*4 == 160){
      				System.out.println("小鸡是:" + x + "只");
      				System.out.println("小兔子是:" + (50-x) + "只");
      			}			
      		}
      	}
      }
      
      1. 栗子4
      /*
      通过循环找寻三位数字的水仙花数
      153  ---> 1  5  3
                1 + 125 + 27 == 153
      		  x*x*x
      100-999之间挨个尝试,满足上述规则的数字成为水仙花数   153  370 371 407
      
      */
      public class Daffodils{
      	public static void main(String[] args){
      		for(int n=100;n<999;n++){
      			if(Math.pow(n/100,3)+Math.pow(n/10%10,3)+Math.pow(n%10,3) == n){
      				System.out.println("三位数字的水仙花数:"+n);
      			}			
      		}
      	}
      }
      
      1. 栗子5

        /*
        *******   画星星,换行                    i==1, 7
        ***#***   画星星,画空格,画星星,换行    i==2, 3 1 3
        **###**   画星星,画空格,画星星,换行    i==3, 2 3 2
        *#####*   画星星,画空格,画星星,换行    i==4, 1 5 1
        如果是第一行,很简单就是画星星
        第二行往后,规则不同
        不管哪种情况,都需要换行
        */
        import java.util.Scanner;
        
        public class DrawStar1{
        	public static void main(String[] args){
        		System.out.println("画几个:");
        		Scanner input = new Scanner(System.in);
        		int line = input.nextInt();
        		for(int i=1;i<=line;i++){  //控制行数
        			if(i==1){//第一行规则
        				//画星星
        				for(int j=1;j<=2*line-1;j++){
        					System.out.print("*");
        				}
        			}else{//后三行规则
        				//画星星
        				for(int j=1;j<=line+1-i;j++){
        					System.out.print("*");
        				}
        				//画空格
        				for(int j=1;j<=2*i-3;j++){
        					System.out.print(" ");
        				}
        				//画星星
        				for(int j=1;j<=line+1-i;j++){
        					System.out.print("*");
        				}
        			}
        			//换行
        			System.out.println();
        		}
        	}
        }
        
      2. 栗子6

        /*
           1           
          121          
         12321         
        1234321        
        
        空格3,     1,     空格3  换行     i==1  --1   
        空格2,   1 2 1,   空格2  换行     i==2  --3
        空格1, 1 2 3 2 1 ,空格1  换行     i==3  --5
              1 2 3 4 3 2 1,                i==4  --7	
        	1 2 3 4 5 4 3 2 1,             i==5  --9
        	  
        	  i==1,j==1,  1,
        	  i==1,j==2,  12,
        */
        
        import java.util.Scanner;
        
        public class Draw1{
        	public static void main(String[] args){
        		System.out.print("请输入图形的高度(行数):");
        		Scanner input = new Scanner(System.in);
        		int line = input.nextInt();
        		for(int i=1;i<=line;i++){//控制行数
        			if(false){
        				System.out.print("1234321");
        			}else{
        				for(int j=1;j<=line-i;j++){//空格
        					System.out.print(" ");
        				}
        				for(int j=1;j<=i;j++){//左   
        					System.out.print(j); 
        				}
        				for(int j=i;j>1;j--){ //右
        					System.out.print(j-1);
        				}
        			}
        				//空格
        				System.out.print(" ");
        				System.out.println();								
        		}
        	}
        }	
        
      3. 栗子7 乘法口诀

        /*
        1*1=1
        1*2=2 2*2=4
        1*3=3 2*3=6 3*3=9
        1*4=4 2*4=8 3*4=12
        
        i==1 1 * 1 = 1             
        i==2 1 * 2 = 2 2 * 2 = 4
        
        for(int i=1;i<=line;i++){}//控制行数
        	第一行 1 * 1 = 1
        	第二行规则
        	for(int j=1;j<=i;j++){j+"*"+i+"="+j*i 空格}  j<i每次输出完一个等式都要空格,当j==i,输完等式,要换行
        	
        */
        
        import java.util.Scanner;
        
        public class DrawMultiplicationFormulas{
        	public static void main(String[] args){
        		System.out.println("请输入一个数,打印该数以内的乘法口诀:");
        		Scanner input = new Scanner(System.in);
        		int line = input.nextInt();
        		for(int i=1;i<=line;i++){
        			if(i==1){
        				System.out.println("1*1=1");
        			}else{
        				for(int j=1;j<=i;j++){
        					if(j<i){
        						System.out.print(j+"*"+i+"="+j*i+" ");
        					}else{
        						System.out.print(j+"*"+i+"="+j*i);
        						System.out.println();
        					}					
        				}
        			}
        		}	
        	}
        }
        
      4. 栗子 找质数和非质数

        /*
        找出2-100之间的素数(质数) 只能被 1和本身整除的数字  2 3 5 7 11 13
        2是素数
        3是素数
        3不是素数
        5是素数
        6不是素数
        7是素数
        
        for(int i=1;i<num;i++){} //控制遍历num以内的所有数
        	for(int j=2;j<=i/2;j++){} //计算i的素数,j从2开始到i/2来遍历
        		if(i%j){} //
        */
        
        import java.util.Scanner;
        
        public class Prime{
        	public static void main(String[] args){
        		System.out.print("输入一个数,我会输出该数以内的所有素数:");
        		Scanner input = new Scanner(System.in);
        		int num = input.nextInt();
        		for(int i=1;i<=num;i++){
        			boolean flag = true;
        			//System.out.print("i=: "+i+" ");
        			//System.out.println("Math.sqrt(i): "+(int)Math.sqrt(i));
        			for(int j=2;j<=Math.sqrt(i);j++){
        				if(i%j==0){			
        					System.out.println(i+"不是素数");
        					flag = false;
        					break;
        				}
        			}
        			//System.out.println("flag: "+flag);
        			if(flag == true){ //如果j循环完,上面的if没有进去过,那就是素数	
        				System.out.println(i+"是素数");
        			}
        		}
        			
        	}
        }
        
        • jdk1.5以后 for新特性
        import java.util.Arrays;
        
        public class Arr{
        	public static void main(String[] args){
        		int[] array = new int[]{1,2,3,4,5};
        		//jdk1.5以后 for新特性
        		for(int value:array){ //只能取值,没有index,找不到元素到底哪一个
        			System.out.println(value);
        		}
        	}
        }
        

        break
        continue
        循环标记 给循环起名字,指定中断标记的循环

    • while

      ​ 1. 栗子1 一层循环

      /*
      有一个水池 已经盛满了120立方米的水
      有一个排水管 每小时进水18立方米
      有一个排水管 每小时排水30立方米
      两水管一起开
      经过多少小时  水池的水排放干净?
      */
      public class TestWhileOne{
      	public static void main(String[] args){
      		int volume = 120;
      		int hour = 0;
      		while(volume>0){
      			volume += 18;
      			volume -= 30;
      			hour++;
      		}
      		System.out.print("水池的水经过"+hour+"小时排放干净");
      	}
      }
      
      1. 栗子2 while嵌套

        /*
        画星星
           *
          ***
         *****
        *******
        
        空格  星星  空格  换行
        3 1 3 换行
        2 3 2 换行
        1 5 1 换行
        0 7 0 
        */
        import java.util.Scanner;
        
        public class WhileDrawStar{
        	public static void main(String[] args){
        		System.out.print("输入画几行:");
        		Scanner input = new Scanner(System.in);
        		int line = input.nextInt();
        		int i = 1;
        		while(i<=line){ //控制line
        			//画空格
        			int j = 1;
        			while(j<=line-i){
        				System.out.print(" ");
        				j++;
        			}
        			//画星星
        			int k = 1;
        			while(k<=2*i-1){
        				System.out.print("*");
        				k++;
        			}
        			//换行
        			System.out.println();
        			i++;
        		}
        	}
        }
        
        1. 栗子3

          /*
          小明同学从A点以7km/h的速度向B点出发
          小雨同学从B点以18km/h的速度向A点出发
          A和B之间的距离是1000km
          求解 小明同学和小雨同学经过多少小时相遇?
          
          设x小时相遇
          7x+18x=1000
          1 25  975
          2 25  950
          3 25  925
          每小时25km,走完1000km  需要40小时
          */
          import java.util.Scanner;
          
          public class WhileTwo{
          	public static void main(String[] args){
          		//System.out.print("输入画几行:");
          		//Scanner input = new Scanner(System.in);
          		//int line = input.nextInt();
          		/*int time = 1;
          		//使用循环标记
          		ok:while(true){
          			while(7*time+18*time == 1000){
          				System.out.print("小明同学和小雨同学经过"+time+"小时相遇");
          				break ok;
          			}
          			time++;
          		}
          		*/
          		int distance = 1000;
          		int time = 0;
          		while(distance>0){
          			distance -= 7;
          			distance -= 18;
          			System.out.println("经过"+time+"小时,还剩余距离: "+distance);
          			time++;
          		}
          		System.out.print("小明同学和小雨同学经过"+time+"小时相遇");
          	}
          }
          运行结果:
          D:myprojectJavaProjectlearndemo
          $ java WhileTwo
          经过0小时,还剩余距离: 975
          经过1小时,还剩余距离: 950
          经过2小时,还剩余距离: 925
          经过3小时,还剩余距离: 900
          经过4小时,还剩余距离: 875
          经过5小时,还剩余距离: 850
          经过6小时,还剩余距离: 825
          经过7小时,还剩余距离: 800
          经过8小时,还剩余距离: 775
          经过9小时,还剩余距离: 750
          经过10小时,还剩余距离: 725
          经过11小时,还剩余距离: 700
          经过12小时,还剩余距离: 675
          经过13小时,还剩余距离: 650
          经过14小时,还剩余距离: 625
          经过15小时,还剩余距离: 600
          经过16小时,还剩余距离: 575
          经过17小时,还剩余距离: 550
          经过18小时,还剩余距离: 525
          经过19小时,还剩余距离: 500
          经过20小时,还剩余距离: 475
          经过21小时,还剩余距离: 450
          经过22小时,还剩余距离: 425
          经过23小时,还剩余距离: 400
          经过24小时,还剩余距离: 375
          经过25小时,还剩余距离: 350
          经过26小时,还剩余距离: 325
          经过27小时,还剩余距离: 300
          经过28小时,还剩余距离: 275
          经过29小时,还剩余距离: 250
          经过30小时,还剩余距离: 225
          经过31小时,还剩余距离: 200
          经过32小时,还剩余距离: 175
          经过33小时,还剩余距离: 150
          经过34小时,还剩余距离: 125
          经过35小时,还剩余距离: 100
          经过36小时,还剩余距离: 75
          经过37小时,还剩余距离: 50
          经过38小时,还剩余距离: 25
          经过39小时,还剩余距离: 0
          小明同学和小雨同学经过40小时相遇
          
        2. 栗子4

          /*
          卖西瓜
          一车西瓜共1020个
          每天卖掉总数的一半多两个
          问:几天卖完所有的瓜
          
          设x天卖完
          第一天卖出 1020/2 + 2 = 512  剩余1020-512=508
          2           508/2 + 2 = 256  剩余508-256=252    
          3           252/2 + 2 = 128  剩余252-128=124
          4           124/2 + 2 = 64   剩余124-64=60
          5           60/2  + 2 = 32   剩余60-32=28
          6           28/2  + 2 = 16   剩余28-16=12
          7           12/2  + 2 = 8    剩余12-8=4
          8            4/2  +2  = 4    剩余4-4=0
          */
          import java.util.Scanner;
          
          public class WhileThree{
          	public static void main(String[] args){
          		int total = 1020;
          		int day = 0;
          		while(total>0){
          			total -= total/2;
          			total -= 2;
          			day++;
          			System.out.println("第"+day+"天剩余"+total+"瓜");
          		}
          		System.out.println(day+"天卖完所有的瓜");
          	}
          }
          运行结果:
          D:myprojectJavaProjectlearndemo
          $ java WhileThree
          第1天剩余508瓜
          第2天剩余252瓜
          第3天剩余124瓜
          第4天剩余60瓜
          第5天剩余28瓜
          第6天剩余12瓜
          第7天剩余4瓜
          第8天剩余0瓜
          8天卖完所有的瓜
          
    • do ... while

    更多学习笔记移步 https://www.cnblogs.com/kknote
  • 相关阅读:
    Typescript 学习笔记一:介绍、安装、编译
    css 如何“画”一个抽奖转盘
    isBalanced函数实现
    链表(单向链表,双向链表)
    IDEA 插件的安装和使用
    leetCode算法------>>>>数组
    二维数组
    IDEA (2019.3) 字体编码和基本设置
    线性结构和非线性结构
    Java反射
  • 原文地址:https://www.cnblogs.com/kknote/p/12803672.html
Copyright © 2020-2023  润新知