java学习笔记(三)语法结构

1.顺序结构

程序从上往下按顺序执行

2.分支结构

2.1单分支 if

if(条件=boolen){
代码
};
if(条件=boolen){

}else{

}
if(){

}else if(){

}else{

}

2.2多分支 swith

switch(值){ //byte short int char 1.5enum  1.7String 
  case 值1:   //只能做==比较
          代码1;
          [break;]可有可无
  case 值2:
          代码2;
  default:
          代码;
} 

2.3 if switch区别

if(很复杂的条件){

}else if(){

}else if(){

}
if        好处(可以写复杂的逻辑)      不好处 执行比较慢
swicth    好处(判断的过程效率更高)    不好处 只能做==(固定值)

3.循环结构 for while  do…while

循环 重复不停的做同样的事
    爬楼梯  1--->5楼
    操场跑圈 1--->5圈
    
    1-5圈
    从哪里开始 1圈 起点
    从哪里结束 5圈 判断 终点的条件
    跑起来变化 增减
程序中想要执行一个正常的循环 和现实生活类似   需要满三个条件(必要)
   初始值 终点判定条件 变化量

3.1 for

允许将三个必要条件都写在()内
for(初始值 ; 终点判定条件 ; 变化量){
  好多好多执行的条件
}
public class TestFor {
  public static void main(String[]args){
        int round =1;
        for (;round<=5;){
            System.out.println("跑到第"+round+"圈了");
           round++;
        }
        //循环执行完毕round值为6
        System.out.println("循环执行完毕"+round);
        //变量的生命周期问题(变量 栈内存空间 从声明开始创建出来 用完即回收)
   }
}

3.2 while

循环想要执行 需要三个必要条件 初始值 终点判定条件 变化量

初始值;
for(;终点判定条件;){
   好多好多执行;
   变化量;
}
允许将三个条件都写在()内 不是不需

初始值;
while(终点判定条件){   //()内只允许写一个
   好多好多执行;
   变化量;
}
我理解就是一个for循环的变体
变量定义在循环外 生命周期长了
变化量放在循环内(注意上下的顺序可能对执行产生影响)
public class TestWhile1 {
    public static void main(String[] args){
         int i=1;
         while(i<=5 ) {
         System.out.println("循环执行中" +i); 
           i++;
         }
         System.out.println("循环执行完毕"+i); //6
         //循环过程中输出多少次 5
         //循环执行完毕后  i=6 
     
    }
}

3.3 do…while

while先判断后执行 条件不满足不执行啦
do...while 先执行后判断 条件不满足 至少执行一次
do{
   好多好多执行;
   变化量;
} while(终点判定条件)

3.4关键字break,continue

3.4.1 break 终止循环
public class TestBreak {
    public static void main(String[] args){
         int i=1;
         int j=1;
         for(;i<=5 ;i++) {
            for(;j<=5 ;j++) {
                  if(j==3){
                     break; //终止 中断
                  }
                  System.out.println("i= "+i+"  j="+j);
             } //i==1 j==3 执行两次输出 i==2 j==?从几开始数?3 i==3 j==3  
         }
         System.out.println(i); //6
         System.out.println(j); //3 
         //循环过程中输出多少次 2
         //循环执行完毕后  i=6 j=3
        /**
         for(int i=1;i<=5 ;i++) {
            for(int j=1;j<=5 ;j++) {
                  if(j==3){
                     break; //终止 中断
                  }
                  System.out.println("i= "+i+"  j="+j);
             }  
         }
         //循环过程中输出多少次 10
         //循环执行完毕后  i=6 j=3
         */

         /**
           for(int i=1;i<=5 ;i++) {
            if(i==3){
              break; //终止 中断
            }
            System.out.println(i); //输出 1 2
         }
         */
    }
}
3.4.2 continue 终止本次循环,进入下次循环
public class TestContinue {
    public static void main(String[] args){
        int i=1;
         int j=1;
         for(;i<=5 ;i++) {
            for(;j<=5 ;j++) {
                  if(j==3){
                     continue; //终止 中断
                  }
                  System.out.println("i= "+i+"  j="+j);
             }//i==1 j==6 输出四次 i==2 j==?从几开始数?6 i==3 j==6   
          }
          //循环过程中输出多少次 4
          //循环执行完毕后  i=6 j=6

         /**
           for(int i=1;i<=5 ;i++) {
            if(i==3){
              continue; //终断本次循环,进入下次循环
            }
            System.out.println(i);
         }
         //循环过程中输出多少次 20
         //循环执行完毕后  i=6 j=6
         */ 
    }
}
3.4.3 循环标记
public class TestBreakAndContinue {
    public static void main(String[] args){
       ok:for(int i=1;i<=5 ;i++) {
            for(int j=1;j<=5 ;j++) {
                  if(j==3){
                     continue ok; //终止 中断
                  } //j==3停住一次 继续下一次i++ i=2 

                  System.out.println("j="+j);
                
             }  
          
         }
       
         //循环过程中输出多少次 10
         //循环执行完毕后  i=6 j=3
      

      /**
        int i=1;
        int j=1;
        ok:for(;i<=5 ;i++) {
            ko:for(;j<=5 ;j++) {
                  if(j==3){
                     break ok; //终止 中断
                  }
                  System.out.println("i= "+i+"  j="+j);
                
             }  
         }
        System.out.println("i= "+i);
        System.out.println("j= "+j);
        */
       /**
        ok:for(int i=1;i<=5 ;i++) {
            ko:for(int j=1;j<=5 ;j++) {
                  if(j==3){
                     break ok; //终止 中断
                  }
                  System.out.println("i= "+i+"  j="+j);
                
             }  
         }
         //循环过程中输出多少次 2
         //循环执行完毕后  i=1 j=3
         //break为什么终断的是里层循环? 不看层次问题 两个循环一模一样
         //如果j==3 break 中断外面的循环---?? 给循环取名字 循环标记
        */
    }
}

4练习?

设计一个小程序 帮我学习英文(星期七个单词)

用户输入的1---> monday
src.zip原码
lib提高好的内库  Scanner引用 开发者给我们提供的一个类文件
     int x=1;
     想要使用Scanner需要如下三步:
     1.在类的上面的第一行 import java.util.Scanner;
     2.需要输入之前Scanner y = new Scanner(System.in);//对象
     3.通过y.让他来做事 int =nexInt();
                    String=nextLine();都可以读取输入的信息;
import java.util.Scanner;

public class StudyEnglish {      //if(){} else实现
   public static void main(String[] args){
/*
    想要使用Scanner需要如下三步:
   1.在类的上面的第一行 import java.util.Scanner;
   2.需要输入之前Scanner y = new Scanner(System.in);//对象
   3.通过y.让他来做事 int =nexInt();
 */
         Scanner input =new Scanner(System.in);
         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("我管你是星期几");

         } 

    }
}
import java.util.Scanner;

public class TestSwitch {      //switch实现
    public static void main(String[] args){
      Scanner input =new Scanner(System.in);
     System.out.println("请您输入一个数字");
      int i=input.nextInt();
      switch(i) {
        case 1:
          System.out.println("monday");
           break; 
        case 2:
          System.out.println("tuesday");
           break;
        case 3:
          System.out.println("wednesday");
           break;
        case 4:
          System.out.println("thursday");
           break;
        case 5:
          System.out.println("friday");
           break;
        case 6:
          System.out.println("Saturday");
           break;
         case 7:
          System.out.println("Sunday");
           break;
        default:
          System.out.println("我管你是星期几error");
      }
 }
  
}

程序要求

1.可读性
    起名字 规范代码  缩进   注释
2.健壮性
    程序严谨 判断时逻辑要严谨
3.实现功能的基础上 能不能做优化(代码结构--简单 减少冗余 性能 内存空间)

if else小任务

1.利用if语句实现一个 判断给定月份对应的季节
  month==5  345春天 678夏天 9 10 11秋天 12 1 2冬天
import java.util.Scanner;
public class Month {            
   public static void main(String[] args ){
          //1.创建一个month变量 用来存储一个月份值(Scanner)
      Scanner input =new Scanner(System.in); 
      System.out.println("请输入月份,我来判断季节");
      
      int month = input.nextInt();//帮我们读取输入的数字 input.nextLine;读取字符串
       //2.通过month存储的值 进行季节的判断   
       /*if(month>=3 && month <=5){
         System.out.println("是春天");       
       }else if(month>=6 && month <=8){
         System.out.println("是夏天");       
       } else if(month>=9 && month <=11){
         System.out.println("是秋天");       
       }else if(month==1 || month ==2 || month==12){
         System.out.println("是冬天");       
       }else{
           System.out.println("无效数字");
       }*/
        //优化结构
       if(month<1 || month>12) {
          System.out.println("您输入的数字不符和月份,数据有误"); 
       }else if(month>=3 && month <=5){
         System.out.println("是春天");       
       }else if(month>=6 && month <=8){
         System.out.println("是夏天");       
       } else if(month>=9 && month <=11){
         System.out.println("是秋天");       
       }else{
         System.out.println("是冬天");       
       }
       
   }
}
2.利用if语句实现一个 判定学生成绩对应的区间
    不及格 60-70及格 70-80中 80-90良 90-100优秀 满分 数据有误
import java.util.Scanner;

public class Grade {
     public static void main(String[] args ){
      Scanner input =new Scanner(System.in);
       System.out.println("请输入成绩");
      int grade = input.nextInt();

      if(grade>0 && grade <60){
        System.out.println("不及格");
       }else if(grade>=60 && grade <70){
        System.out.println("及格");
       }else if(grade>=70&& grade <80){
        System.out.println("中");
       }else if(grade>=80 && grade <90){
        System.out.println("良");
       }else if(grade>=90 && grade <100){
        System.out.println("优秀");
       }else if(grade ==100){
        System.out.println("满分");
       }else{
        System.out.println("无效数字");
      }
   }
}

3.扩展 利用if实现一个随机摇骰子的小游戏
  随机摇一个骰子的点数 1-6 123 456
  玩家利用Scanner输入 猜数字
  利用if比较 猜对了 猜错了 Math.random()
import java.util.Scanner;
import java.util.Random;

public class GuessNumber {            
   public static void main(String[] args ){
    //1.随机摇骰子的过程,随机产生一个骰子点数  1-6整数
      int num = (int)(Math.random() * 5 + 1);      
       //2.让玩家猜测数字 
      Scanner input =new Scanner(System.in);
      System.out.println("请输入一个数字")
      int a = input.nextInt();
      //3.比较点数和猜测结果
      if(a==num){
            System.out.println("骰子为"+num+",猜对了") ;
      }else{  
            System.out.println("骰子为"+num+",猜错了") ;
      }

   }
}

switch小任务

1.利用switch语句实现一个 判定学生成绩对应的区间
不及格 60-70及格 70-80中 80-90良 90-100优秀 满分 数据有误
 import java.util.Scanner;

public class SwitchGrade {
    public static void main (String[] args){

       //1.先输入成绩
         Scanner input = new Scanner(System.in);
         System.out.println("请输入学习成绩,判断区间");
          int grade =input.nextInt();
         //2.判断成绩
         switch (grade/10){   //61/10 6
             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:  
               //一百多分100-109 优化
               if(grade==100){
                System.out.println("满分");
                 break;
               }
               
             default:
                System.out.println("不及格,或数据错误");
                break;
          }
   }
}

2.利用Scanner输入一个值(代表一个星期几 4)
为小茗同学制定一个学习计划
1 3 5学习语文
2 4 6学习数学
7

public class SwitchLearn {
     public static void main(String[] args){
         //1.先输入星期几
         Scanner input = new Scanner(System.in);
         System.out.println("请输入星期几");
          int day =input.nextInt();
         //2.判断星期几做什么
         switch(day){
          /*   case 1 :
                System.out.println("星期1学习语文");
                break;
             case 2 :
                System.out.println("星期2学习数学");
                break;
             case 3 :
                System.out.println("星期3学习语文");
                break;
             case 4 :
                System.out.println("星期4学习数学");
                break;
             case 5 :
                System.out.println("星期5学习语文");
                break;
             case 6 :
                System.out.println("星期6学习数学");
                break;
             case 7 :
                System.out.println("星期天休息");
                break;
             default :
                System.out.println("输入的数字不是星期");  
              */  
        //优化      
        switch(day){
             case 1 :
             case 3 :
             case 5 :
                System.out.println("学习编程");
                break;
             case 2 :
             case 4 :
             case 6 :
                System.out.println("学习英语");
                break;
             case 7 :
                System.out.println("用英语编程");
                break;
             default :
                System.out.println("输入的数字不是星期");  
         }
     } 
}

for 小任务

1.
操场上有一百多人,让他们排队
三个人一组 多一人,四个人一组,多两个,五个人一组 多两个
求解 操场上的人数多少?
解:设 操场的人数x
x%3 ==1 x%4==2 x%5==2
计算机想要找到x的值 不是通过计算得来的 通过最笨拙的方法 挨个尝试
想要挨个的尝试 需要一个范围
让计算机帮我们 在100-200之间 挨个尝试一下 哪一个数字符号上述条件
 public class ForDemoOne {
   public static void main(String[] args)  {
        for(int x=100;x<=200;x++ ){
            if(x%3==1 && x%4==2 && x%5==2  ){
               System.out.println("操场人数有"+x+"个"); //142
             }
         }
   }
}
2.甲乙丙丁四个人加工零件 加工的总零件数为370个
 如果甲加工的零件数多10
 如果乙加工的零件数少20
 如果丙加工的零件数乘以2
 如果丁加工的零件数除以2'
 则四个人加工的零件数就相等了
 求 四个人加工的零件个数分别是多少?
 思路:
 设相等的数为x;
 甲+10=x;
 乙-20=x;
 丙*2=x;
 丁/2=x;
 甲+乙+丙+丁===> (x-10)+(x+20)+(x/2)+(x*2)= 370;
                   x      x      0     2x   95 最大 最小预计 45
public class  ForDemoTwo {
   public static void main(String[]args ){
      /* for(int x=1;x<=370;x++) {
          if((x-10)+(x+20)+(x/2)+(x*2) ==370 ) {
              System.out.println("甲加工的零件数为"+ (x-10)+ "  x="+x);//70  80
              System.out.println("乙加工的零件数为"+ (x+20)+ "  x="+x);//100 80
              System.out.println("丙加工的零件数为"+ (x/2) + "  x="+x);//40  80
              System.out.println("丁加工的零件数为"+ (x*2) + "  x="+x);//160 80
           }
       }*/
       //优化 判断估计初始值 和最后值
       for(int x=45;x<=95;x++) {
          if((x-10)+(x+20)+(x/2)+(x*2) ==370 ) {
              System.out.println("甲加工的零件数为"+ (x-10)+ "  x="+x);//70  80
              System.out.println("乙加工的零件数为"+ (x+20)+ "  x="+x);//100 80
              System.out.println("丙加工的零件数为"+ (x/2) + "  x="+x);//40  80
              System.out.println("丁加工的零件数为"+ (x*2) + "  x="+x);//160 80
           }
       }
   }
}
3.鸡兔同笼问题
小鸡 小兔子 关在同一个笼子里 小鸡两只脚 小兔子四只脚
小鸡+小兔子 总数50只 脚的总数160只
求 小鸡 和小兔子各多少只
思路
设鸡x只
则兔有 50-x 只
鸡*2+ 兔*4 =160 ====> x*2+(50-x)*4 == 160
public class ForDemoThree {
    public static void main(String [] args){
        for(int x=1; x<=50;x++){
           if(x*2 + (50-x)*4 == 160){
           System.out.println("鸡有 "+x+"只");         //20
           System.out.println("兔有 "+ (50-x) +"只");  //30
          }

       }
   }
}
4.通过循环找到三位数的水仙花数
153---->1   5    3 各自立方和
        1+ 125+ 27=153
100-999之间挨个尝试 满足上述规则数字 153 370 371 407
思路
数x 
百位 a = x/100 
十位 b = (x%100)/10
个位 c = x%10 
a*a*a +b*b*b +c*c*c ==x;
public class ForDemoFour {
    public static void main(String [] args){
     /*   for(int x=100; x<=999;x++){
          int a = x/100; 
          int b = (x%100)/10;
          int c = x%10;
           if(  a*a*a +b*b*b +c*c*c  == x){
             System.out.println("水仙花数是 "+x); //153 370 371 407
          }
       }*/
       //优化
       for(int x=100; x<=999;x++){
         if(Math.pow(x/100,3) +Math.pow((x%100)/10,3)+Math.pow(x % 10,3)             == x){
             System.out.println("水仙花数是 "+x); ////153 370 371 407
            }
       }
   }
}

for循环嵌套

需求 控制台打印*
1.控制台输出1行 ****
2.控制台输出4行 ****
3.控制台输出4行 
              *
              **
              ***
4.控制台输出4行       
                 *
                **
               ***
              ****
import java.util.Scanner; 

public class DrawStar {
    public static void main(String [] args){

          for(int i=1;i<=4;i++){   //控制4行
             //画占位符
             for(int j=1;j<=4-i;j++) {
                System.out.print(" ");
             }
             //画星星
             for(int j=1;j<=i;j++) {
                System.out.print("*");
             }
             System.out.println();
          }

         /* 3
         for(int i=1;i<=4;i++){
             for(int j=1;j<=i;j++) {
                System.out.print("*");
             }
             System.out.println();
          } */
        
         /*2. 
         int count=4; //每一行星星的数量随意
         for(int i=1;i<=4;i++){
             for(int j=1;j<=count;j++) {
                System.out.print("*");
             }
             System.out.println();
          }*/
          //让计算机帮我们做四次同样的事
          //i j 分别控制着什么? i控制行数 j控制的是每一行星星的个数
          //i==5 5<=4 false
          //  j==5 5<=4 false
        //1.复用性
      /*  System.out.println("尊敬的客户,您需要画几个");
         Scanner input =new Scanner(System.in);
         int count=input.nextInt();
         for(int i=1;i<=count;i++){
            System.out.print("*");
         }*/
    
   }
}
嵌套任务1
*******
*** ***
**   **
*     *
思路:
输出4行 外面循环i=4次
i=1时 输出j = 7 次*             1234567
i=2时 当j= 4时        输出空格 123 4 567 
i=3时 当j= 3 4 5      输出空格 12 345 67
i=4时 当j= 2 3 4 5 6  输出空格 1 23456 7
import java.util.Scanner;
public class Demo1{
    public static void main(String [] args){
         Scanner input = new Scanner(System.in);
         System.out.println("请输入行数");
          int line =input.nextInt();
        
          //******* 画星星 换行              i=1        7
          //*** *** 画星星 画空格 画星星 换行  i=2      3 1 3
          //**   ** 画星星 画空格 画星星 换行  i=3      2 3 2
          //*     * 画星星 画空格 画星星 换行  i=4      1 5 1
          for(int i=1;i<=line; i++){   //控制4行
             if(i==1){ //第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.数字金字塔
     1
    121
   12321
  1234321
import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {
        /**                           空格 左数字  右数字   空格
         *
         * 1          1        i=1     3   1-1    0      3
         * 2        1 2 1      i=2     2   1-2    1-1    2
         * 3      1 2 3 2 1    i=3     1   1-3    2-1    1
         * 4    1 2 3 4 3 2 1  i=4     0   1-4    3-1    0
         */
        Scanner input = new Scanner(System.in);
        System.out.println("请输入行数");
        int line =input.nextInt();        //行数
       
        for (int i = 1; i <= line; i++) {   // i 控制行
            
            //空格占位
            for (int j = 1; j <= line - i; j++) {
                System.out.print("  ");
            }
            //左 数字 小到大  j++
            for (int j = 1; j <= i; j++) {
                System.out.print(j+" ");
            }
           //右 大到小  j--
           for (int j = i-1; j >=1; j--) {
                System.out.print(j+" ");
            }
            // 空格
            for (int j = 1; j <= line - i; j++) {
                System.out.print("  ");
            }
            //换行
            System.out.println("");
        }
    }
}
3 输出乘法口诀
1*1=1
1*2=2 2*2=4
public class Demo3 {
    public static void main(String []args){
        /**
         * 1 * 1 =1                输出次数 1   与外循环的行数相同
         * 1 * 2 =2  2 * 2 =4               2
         *                                  3   
         * 行数 9                       
         * 解析 循环* 行数 = 结果
         *  第二个循环循环 次数为 
         */
        for(int i=1;i<= 9;i++ ){
            for(int j=1;j<=i ;j++ ){
              //\t 转义 表格
                System.out.print(j +" * "+i +" = "+j*i+"\t");
            }
            System.out.println("");
        }
    }
}
4 .找寻2-100之间的素数(质数)
找寻2-100之间的素数(质数) 只能被1和本身整除的数字 2 3 5 7 11
2是素数
3是素数
4不是素数
5是素数
6不是素数
public class Demo4 {
    public static void main(String[] args) {
        /**
         * 判断2-100的素数 从2开始 到100 每个数判断一次 并输出
         * 只能被1和本身整除的数字
         *  判断是否素数
         *  将循环到的数i 依次除  2 到 i-1 都有余数就素数
         *  当出现余为0时就不是素数 此时需要记录 此数不是素数
         */
         boolean bl=true;
            //判断 是否素数 i/2 break 优化循环
            for (int j = 2; j <= i/2; j++) {
                if (i % j == 0) {
                    bl=false;
                    System.out.println(i +" 不是素数");
                    break;   //跳出此次循环
                }
            }
            //输出
            if (bl){
                System.out.println(i +" 是素数");
            }
        }
    }
}

发布了30 篇原创文章 · 获赞 0 · 访问量 6656

猜你喜欢

转载自blog.csdn.net/qq_37710756/article/details/103256956