JavaSE-流程控制

Posted Zh1z3ven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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+"\\t");            }            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语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

以上是关于JavaSE-流程控制的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE-流程控制

Java全栈JavaSE:7.流程控制

JavaSE:流程控制

JavaSE:流程控制

JavaSE-运算符和流程控制

javaSE练习2——流程控制_2.2