zoukankan      html  css  js  c++  java
  • JavaSE-流程控制

    流程控制

    1. 用户交互Scanner 获取用户键盘输入
    2. 顺序结构 程序按顺序执行流程
    3. 选择结构 if,switch
    4. 循环结构 for,do while,while
    5. Break & Continue
    6. 所有的流程控制语句都可以相互嵌套而互不影响

    Scanner

    Scanner , java.util.Scanner 是Java5的新特征,通过此类获取用户输入。

    基本语法

    Scanner s = new Scanner(System.in)
    

    通过Scanner类的next()和nextLine()方法获取输入的字符串,在读取前我们一般需要使用hashNext()与hashNextLine()判断是否还有输入的数据。

    next()判断是否有下一个字符,如遇到空格,则空格后的字符并不会被打印出来;而nextLine()则会打印整行内容。

    hashNextInt() 判断是否输入为int型

    hashNextFloat() 判断输入是否为float类型

    package com.Zh1z3ven.Scanner;
    
    import java.util.Scanner;
    
    public class Demo01 {
        public static void main(String[] args) {
    
            // 创建一个扫描器对象,用于接收键盘数据
            Scanner scanner = new Scanner(System.in);
    
            // alt + enter 显示提示快捷键;mac为option + enter
    
            System.out.println("使用next方式接受:");
    
            // 判断用户有没有输入字符串
    
            if (scanner.hasNext()){
                //使用next接受用户输入
                String str = scanner.nextLine();
                System.out.println("输出的内容为:"+str);
            }
    
            // 用完scanner后关闭,节省资源,凡是io流,用完后需要关闭,节省资源
            scanner.close();
        }
    }
    

    IDEA获取structure

    Command + 单击 --> 跟进此类的源码,点击Structure可以看此类中的所有方法

    image-20210603231015956

    if else 判断语句

    通过关系表达式的值判断,为true执行if,为false执行else

    if (关系表达式){
                语句体;
    }else if (关系表达式){
                语句体;
    }else {
    						语句体;
    }
    
    public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("请输入内容:");
    
            String s = scanner.nextLine();
    
            //s.equals 判断字符串是否相等
            if (s.equals("Hello")){
                System.out.println(s);
            }else {
                System.out.println("end");
            }
    
            scanner.close();
    
        }
    

    if else if

    public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("请输入成绩:");
    
            int score = scanner.nextInt();
    
            if (score >= 90 && score < 100){
                System.out.println("A");
            }else if (score >= 80 && score < 90){
                System.out.println("B");
            }else if (score >= 70 && score < 80){
                System.out.println("C");
            }else if (score >= 60 && score < 70){
                System.out.println("D");
            }else if (score >= 0 && score < 60){
                System.out.println("不及格");
            }else {
                System.out.println("输入的成绩有误");
            }
    
    
            scanner.close();
        }
    

    Switch选择语句

    switch格式

    switch(表达式) {
    case 常量值1:
    语句体1;
    break;
    case 常量值2:
    语句体2;
    break;
    ...
    default:
    语句体n;
    break;
    }
    

    首先计算出表达式的结果,依次将该结果与case后跟的值进行比较,如果有相等的值则执行相应case中的语句,遇到break跳出switch语句,如果没有case符合表达式的结果,则执行default中语句。case后的值可以是byte/short/int/char,在javaSE7之后支持String类型,case标签必须是字符串常量或字面量

    JDK7的新特性,表达式的结果可以是字符串

    字符的本质还是数字

        public static void main(String[] args) {
    
            int weekday = 4;
            switch (weekday) {
                case 1:
                		// 这里case下面不加break会出现case穿透,即没加break的case都会执行一遍语句体,不管是否匹配表达式
                    System.out.println("星期一");
                    break;
                case 2:
                    System.out.println("星期二");
                    break;
                case 3:
                    System.out.println("星期三");
                    break;
                case 4:
                    System.out.println("星期四");
                    break;
                case 5:
                    System.out.println("星期五");
                    break;
                default:
                    System.out.println("输入参数有误");
                    break;
            }
    
        }
    

    反编译

    因为Java程序在执行时会把java文件先编译为class文件,而class文件打开是字节码文件,用文本形式打开是乱码,这时候就需要反编译class文件,将其变为java文件方便我们阅读。而IDEA就可以做到反编译。

    将我们编译运行java文件生成的对应的class文件拷贝到上面的程序目录

    public static void main(String[] args) {
            String name = "Zh1z3ven";
    
            switch (name){
                case "Zh1z3ven":
                    System.out.println("Zh1z3ven");
                    break;
                default:
                    System.out.println("输入有误");
            }
    
    
        }
    

    image-20210604165009816

    这时就可以看到java文件了,这里机器在处理时利用字符串的hashcode去代替字符串进行判断。

    image-20210604165325624

    顺序结构

    在java中main函数作为程序主入口,从main函数开始顺序执行代码块。

    for循环

    当布尔表达式为true时循环执行循环体中内容,直到布尔表达式为false时,结束循环。

    关于for循环的说明

    最新执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。

    然后检测布尔表达式的值。如果为true,循环体被执行,如果为false,循环种植,开始执行循环体后面的语句

    执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)

    再次检索布尔表达式,循环执行上面的过程

    for(初始化表达式;布尔表达式;步进表达式){    循环体;}
    
    public static void main(String[] args) {        for (int i = 1; i <= 9; i++) {            for (int j = 1; j <= i; j++) {                System.out.print(j+"*"+i+"="+j*i+"	");            }            System.out.println("");        }    }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	4*4=16	1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	
    

    增强for循环

    主要是用来遍历数组和集合对象的。

    Jdk5引入了一种主要用于数组和集合的增强型for循环

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

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

    for(声明语句:表达式){	//代码}
    
    public static void main(String[] args) {        int[] numbers = {10, 20, 30, 40, 50};        for (int x:numbers){            System.out.println(x);        }    }
    

    while循环

    当布尔表达式为true时执行循环体,若永远为true则是死循环,可以添加步进表达式控制循环次数,当布尔表达式永真时则为死循环。所以也需要控制布尔表达式的值,当达到目的后停止while循环。

    初始化表达式while(布尔表达式){循环体步进表达式}
    
    public static void main(String[] args) {        // 输出1-100        int i = 0;        while (i<100){            i++;            System.out.println(i);        }
    
    public static void main(String[] args) {        // 计算1+2+3+...100        int i = 0;        int sum = 0;        while (i<100){            i++;            sum += i;        }        System.out.println(sum);            }
    

    do-while循环

    do-while会先执行一次循环体在去判断布尔表达式,也就是说无论如何都会执行一次循环体,而while循环,当布尔值为false直接会跳过循环体不执行。

    初始化表达式do{循环体步进表达式}while(布尔表达式);
    
    // do-while会执行一次循环体,而下面的while并不会执行循环体public static void main(String[] args) {        int i = 0;        int sum = 0;        do {            i++;            sum = sum + i;        }while (i<100);            System.out.println(sum);    }
    
    • [x] > 控制条件语句所控制的那个变量(比如常用i作控制循环次数的变量),在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。

      while与do-while区别

    break&continue

    break

    break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)

    continue

    contibue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

    所有内容仅限于维护网络安全学习参考
  • 相关阅读:
    【2017中国大学生程序设计竞赛
    【hdu 4333】Revolving Digits
    【hihocoder 1554】最短的 Nore0061
    【2017中国大学生程序设计竞赛
    【Codeforces Beta Round #88 C】Cycle
    【2017 Multi-University Training Contest
    【Codeforces Round #429 (Div. 2) C】Leha and Function
    【Codeforces Round #429 (Div. 2) B】 Godsend
    【Codeforces Round #429 (Div. 2) A】Generous Kefa
    Single-stack real-time operating system for embedded systems
  • 原文地址:https://www.cnblogs.com/Zh1z3ven/p/14881602.html
Copyright © 2011-2022 走看看