Java学习_DAY3_流程控制

流程控制

1.用户交互Scanner

  • 先导包:import java.util.*;

  • 基本语法:Scanner s =new Scaaner(System.in);

  • 通过Scanner类的next()与nextLine()方法输入的字符串,使用hasNext()与hasNextLine()判断是否还有输入的数据

    public class demo1{
        public static void main (String[] args){
          Scanner reader =new Scanner(System.in);
            //创建扫描器对象,用于接收键盘数据
          System.out.println("使用next方式接收:");
            //判断用户有没有输入字符串
          if(reader.hasNext()){
        String str =reader.next();
        System.out.println("输出的内容是:"+str);
             }
            reader.close();
            //凡是io流的类如果不关闭就会占用资源
       }
    }
    
  public class demo2{
    public static void main (String[] args){
      Scanner reader =new Scanner(System.in);
        //创建扫描器对象,用于接收键盘数据
      System.out.println("使用nextLine方式接收:");
        //判断用户有没有输入字符串
      if(reader.hasNextLine()){
    String str =reader.nextLine();
    System.out.println("输出的内容是:"+str);
         }
        reader.close();
        //凡是io流的类如果不关闭就会占用资源
   }
  }
  • 两者区别:若输入Hello World,前者输出Hello,后者输出Hello World

    • next():1.一定要读到有效字符才可以结束输入

      ​ 2.对输入有效字符之前遇到的空白,next()方法会自动去除

      ​ 3.对输入有效字符后才将其后面输入的空白作为分隔符或者结束符

      ​ 4.next()不能得到带有空格的字符

    • nextLine():1.以enter作为结束符,也就是说nextLine()方法输入回车之前的所有字符

      ​ 2.可以获得空白

Scanner 进阶拓展用法

import java.util.*;
punlic class Demo3{
    public static void main (String[] args){
        Scanner reader=new Scanner (System.in);
        
        //从键盘接收数据
        int i=0;
        float f=0.0f;
        Systm.out.println("请输入整数:");
        if (reader.hasNextInt()){
           i=reader.nextInt();
            System.out.println("整数数据:"+i);
        }
            else 
                System.out.println("输入的不是整数数据");
                
        reader.close();
        
    }
}

hasNextInt();nextInt();

hasNextFloat();nextFloat();

hasNextDouble();nextDouble();

import java.util.*;
public class Demo4{
    public static void main(String[] args){
        Scanner reader=new Scanner (System.in);
        //输入多个数字,并求出总和和平均数,没输入一个数字用回车键确认,通过输入非数字来结束输入并输出执行结果
        double sum =0;//计算和
        int num = 0;//计算输入了多少个数字
        while(reader.hasNextDouble){
            sum=sum+reader.nextDouble();
            num++;
            }
        System.out.println(num+"个数的总和为"+sum);
        System.out.println(num+"个数的平均数为"+(sum/num));
            
        reader.close();
    }
}

2.顺序结构

  • java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行
  • 顺序结构是最简单的算法结构,从上到下
  • 任何一个算法都离不开的一种基本算法结构
public class Demo5{
    public static void main(String []args){
        System.out.println("hello");
        System.oout.println("hi");
    }
}

3.选择结构

  • if单选择结构

    if(布尔表达式){
    //表达式为true执行的语句
    }

  • if双选择结构

    if(布尔表达式){
    //如果布尔表达式为true执行的语句
    }else{
    //如果表达式为false执行的语句
    }

  • if多选择结构

    if(布尔表达式1){
    //如果布尔表达式1为true
    }else if(布尔表达式2){
    //如果表达式2为true
    }else {
    //如果以上布尔表达式不为true执行代码
    }

  • 嵌套的if结构

    if(布尔表达式1){
    ​ if(布尔表达式2){}
    }

  • switch多选择结构

    switch语句中的变量类型可以是:byte、short、int、char、String(JDK7开始)

    case标签必须是字符串常量或者字面量

    switch(expression){
    ​ case value :
    ​ //语句
    ​ break;
    ​ case value:
    ​ //语句
    ​ break;
    ​ ···············
    ​ default :
    ​ //语句
    }

import java.util.*;
public class IfDemo1{
    Scanner reader =new Scanner(System.in);
    System.out.println("请输入内容:");
    String s=reader.nextLine();
    //equals():判断字符串是否相等
    if(s.equals("Hello")){
        System.out.println(s);
    }
    System.out.println("End");
    reader.close();

} 
import java.util.*;
public class IfDemo2{
    Scanner reader =new Scanner(System.in);
    System.out.println("请输入分数:");
    int score=reader.nextInt();
    if(score>=60){
        System.out.println("及格");
    }else{
        System.out.println("不及格");
    }
    reader.close();

} 
import java.util.*;
public class IfDemo3{
    Scanner reader =new Scanner(System.in);
    System.out.println("请输入分数:");
    int score=reader.nextInt();
    if(score>=60&&score<80){
        System.out.println("及格");
    }else if(score>=80&&score<=100){
        System.out.println("优秀");
    }else if(score>100&&score<0){
        System.out.println("成绩不合理");
    }else{
        System.out.println("不及格");
    }
    reader.close();

} 
public class SwitchDemo{
    public static void main(String[] args){
        char grade ='B';
        switch(grade){
            case 'A':
            System.out.println("优秀");
            break;//及时终止程序,防止穿透
            //例如grade=A,后面没有break;那么后续的语句也会执行,知道遇到break;
            case 'B':
            System.out.println("良好");
            break;
            case 'C':
            System.out.println("合格");
            break;
            default:
            System.out.println("不合格");
        }
    }
}

拓展:反编译 java——class——反编译(例如IDEA)

字符的本质是数字在反编译后像switch语句中即使输入的是字符串(String name = “夸父”);通过name.hasCode()方法找到对应的编码数字,再去找到对应的case语句。

4.循环结构

  • while循环

    • 最基本的循环

      while(布尔表达式){

      //循环内容

      }

    • 只要表达式为true,循环就会一直执行下去

    • 大多数情况要通过一个表达式失效的方式来结束循环

    • 少部分(例如服务器的请求响应监听等)会让程序一直循环

    • 正常业务中避免死循环,否则会影响程序性能甚至卡死崩溃

public class WhileDemo{
    public static void main(String[] argd){
        //输出1~100
        int i=1;
        while(i<=100){
            System.out.println(i);
            i++;
        } 
        //计算1+2+^+100
        int num = 0;
        int sum =0;
        while(num<=100){
            num++;
            sum=num+sum;
        }
         System.out.println(sum);
    }
}
  • DoWhile循环

    • 对于while语句而言,如果不满足条件,就不会进入循环,但是do_while语句至少会执行一次循环体
  • while先判断后执行;do_while先执行后判断

    • do{
      //代码语句
      }(布尔表达式);
    public class DoWhileDemo{
        public static void main(String[] argd){
            
            //计算1+2+^+100
            int num = 0;
            int sum =0;
            do{
                num++;
                sum=sum+num;
            }while(num<=100);
             System.out.println(sum);
        }
    }
    
  • for循环

    • 支持迭代的一种通用结构,最有效、灵活的循环结构

    • for循环执行的次数是在执行前就确定下来的

      for(初始化;布尔表达式;更新值){
      //代码语句
      }

    public class ForDemo1{
        public class void main (String[] args){
            for(int i=0;i<=100;i++){
                System.out.println(i);
            }
            System.out.println("for循环语句结束");
        }
    }
    
    public class ForDemo2{
        public class void main(String[] args){
            //计算0~100奇数和偶数的和
            int oddSum=0;
            int evenSum=0;
            for(int i=0;i<100;i++){
                if(i%2!=0)
                    oddSum=oddSum+i;
                //oddSum+=i;
                else
                    evenSum=evenSum+i;
                //evenSum+=i;
            }
            System.out.println("奇数的和:"+oddSum);
            System.out.println("偶数的和:"+evenSum);
            
            
            //用while循环或者for循环输出1~1000被5整除的数字,并且每行输出3个
            for (inti=0;i<=1000;i++){
                if(i%5==0){
                    System.out.println(i+"\t");
                }
                if(i%(3*5)==0){
                    System.out.println();
                //System.out.print("\n")
                //println输出后自动换行;print输出后不会自动换行
                 
                }
            }
        }
    }
    
    //打印九九乘法表
    public class ForDemo3 {
        public static void main(String[] args){
            for(int i=1;i<=9;i++){
                //下面语句如果是for(int j=1;j<=i;j++)则乘法表格式不同
                for (int j=i;j<=9;j++){
                    System.out.print(i+"*"j+"="+i*j+"  ");
    
                }
                System.out.println();
            }
        }
    }
    
  • 增强for循环(for each语句)(JDK5后引进)

    • for(声明语句:表达式){
      //代码句子
      }

    • 声明语句:声明新的局部变量,该变量的类型必须与数组元素类型相匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等

    • 表达式:访问的数组名,或者是返回值为数组的方法

      public class ForEach {
          public static  void main(String[] args) {
              int[] Arrays1 = {12, 23, 43, 25};
              for (int i : Arrays1) {
                  System.out.println(i);
              }
              //相当于下列for循环语句
              for(int i=0;i<Arrays1.length();i++){
                  System.out.println(i);
              }
          }
      }
      
  • break;continue;

    break 结束整个循环体,强制退出循环

    continue会结束某一次循环然后跳至下一次循环,跳过循环体中尚未执行的语句

    • 关于goto关键字,尽管goto仍然是java的一个保留字,但是尚未在Java语言中得到正式使用;Java没有goto。但是在break,和continue中我们可以观察到goto的影子···带标签的break和continue
    • “标签”是指后面跟冒号的标识符,如label:
    • java中唯一用到标签的地方是循环语句之前,然而在循环之前设置标签的唯一理由是,我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但是有标签的使用就会中断存在标签的地方
上一篇:day3学习java CLASS


下一篇:Python学习Day3-time库、基本数据类型与字符操作