2021-03-04

Java 流程控制

  1. 用户交互canner

  2. 顺序结构

  3. 循环结构

  4. 选择结构

  5. break&continue

  6. 练习

用户交互canner

canner对象

获取用户输入

基本语法:

​ 创建scanner语句 实现程序与人的交互

Scanner s=new Scanner(System.in);

通过scanner 类的next()与nextLine()方法获取输入的字符串。

hasNext()与hasNextLine方法判断是否还有输入的数据

next()
package com.shifei.next;

import java.util.Scanner;

    //next()
public class Domo00 {
        public static void main(String[] args) {
            //创建一个扫描器对象,用于接收键盘数据
            Scanner scanner = new Scanner(System.in);

            //输出内容
            System.out.println("使用Next方式接收:");

            //使用hasNext判断用户有没有输入字符串
            if (scanner.hasNext())
            {
                //程序会等待用户输入完毕
                String str = scanner.next();

                //输出内容
                System.out.println("输出内容:" + str);
            }
            //凡是属于io流的类,如果不关闭会一直占用资源
            scanner.close();
        }
}
  1. 在读取到有效字符后才可结束输入

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OHbPMGwB-1614818091035)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214174827571.png)]

  2. 在有效字符前输入的字符next()方法会将其关闭

  3. 有效字符后的空格将会视为

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Le7MQNy-1614818091036)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214174902581.png)]

  4. next()方法识别不到空格后的字符

nextLine()
package com.shifei.next;

import java.util.Scanner;

    // 使用nextLine方法
public class Domo01 {
    public static void main(String[] args) {
        // 创建一个扫描器,用来接收键盘数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLine方式接收:");
        //判断用户是否有输入语句串
        if (scanner.hasNext())

        {
            //程序会等待用户输入完毕
            String str=scanner.nextLine();

            //输出内容
            System.out.println("输出内容为:"+str);
        }

        //凡是属于io流的类,如果不关闭会一直占用资源
        scanner.close();
    }
}
  1. 可以获取空格

  2. 以回车作为结束符,可以获取输入回车前的所有字符

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wjVYk1FP-1614818091039)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214180630434.png)]

去掉判断语句
package com.shifei.next;

import java.util.Scanner;

    //去掉判断语句 使用nextLine方法
public class Domo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数据:" );

        //程序会等待用户输入完毕
        String str=scanner.nextLine();

        //输出内容
        System.out.println("输出内容为:"+str);

        //凡是属于io流的类,如果不关闭会一直占用资源
        scanner.close();

    }
}

应用实例:

先使用hasNextXxx()方法进行验证,再使用nextXxx()来读取。

  1. Scanner进阶 整数与小数

    package com.shifei.next;
    
    import java.util.Scanner;
    
        //应用实例:整数与小数
    public class Domo03 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int i;
            float f;
            //输入整数
            System.out.println("输入整数:");
    
            if (scanner.hasNextInt())
            {
                //接收数据
                i = scanner.nextInt();
                System.out.println("整数数据:" + i);
            }
            else
            {
                System.out.println("不是整数");
            }
    
            //输入小数
            System.out.println("输入小数");
            if (scanner.hasNextFloat())
            {
                f = scanner.nextFloat();
    
                System.out.println("小数:" + f);
            }
            else {
                System.out.println("输入的不是小数");//整数既可以是整数,也可以是浮点数
            }
            scanner.close();
        }
    }
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z2jYPIhD-1614818091040)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214200621533.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0jiqzqjK-1614818091043)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214200636769.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0r2zXSi3-1614818091047)(C:\Users\Administrator\Desktop\360截图20210214204800821.jpg)]

整数是指正整数、负整数和零,如负6、0、32等。浮点数是指带有有限位小数的有理数,如负10、8、0.00、25、01等。整数与浮点数的区别:整数既可以是整数,也可以是浮点数,例如255是整数,而255、0则是浮点数;整数运算得到的结果是一个整数,并且计算结果中的小数部分将被忽略。浮点运算得到的结果是一个浮点数,计算结果中的小数部分将保留下来。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CDUvtFjV-1614818091049)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214212051184.png)]

  1. 输入多个数字,并求和和平均值,每输入一个数字并回车,通过非数字结束,并输出内容
package scanner;

import jdk.nashorn.internal.ir.WhileNode;

import java.util.Scanner;

public class Domo4 {
    public static void main(String[] args) {
        //输入多个数字,并求和和平均值,每输入一个数字并回车,通过非数字结束,并输出内容
        Scanner scanner = new Scanner(System.in);
        //总和
        double sum = 0;

        //个数
        int m = 0;
        //输出内容
        System.out.println("请输入数据");

        //循环判断是否还有输入
         while (scanner.hasNextDouble())
        {
            //程序会等待用户输入完毕
            double v = scanner.nextDouble();
            //每输入一个数字,个数m+1
            m=m+1;
            sum = sum + v;
            System.out.println("您输入了第" + m + "个数字,当前sum=" + sum );
        }

            System.out.println(m + "总和为:" +  sum );
            System.out.println(m + "平均值为:" + ( sum / m ) );

            scanner.close();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EJrE8JZD-1614818091051)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215043156342.png)]

注:while语句后不能加分号

顺序结构

选择结构

  1. 单选择结构
  2. 双选择结构
  3. 多选择结构
  4. 嵌套结构
  5. switch多选择结构

单选择结构

if(表达式)----True-----语句—结果

if (表达式) ----False--------------结果

package com.shifei.struck;

import java.util.Scanner;

    //判断字符是否相同
public class Domo00 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入内容:");
        String s = scanner.nextLine();

        //equals判断字符是否相同
        if (s.equals("Hello")){
            System.out.println("输出结果为:"+s);
        }
        System.out.println("End");
        scanner.close();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k4pt6wku-1614818091052)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214232411422.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHEPiVMU-1614818091054)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214232502756.png)]

双选择结构

if(表达式)------true-----true语句----结果

if (表达式) -----False----False语句-----结果

package com.shifei.struck;

import java.util.Scanner;

    //分数是否及格
public class Domo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入分数:");
        int score = scanner.nextInt();

        if (score>=60){
            System.out.println("及格");
        }
        else {
            System.out.println("不及格");}
        scanner.close();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NRS5tKU4-1614818091055)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215045526977.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RpSOpLwH-1614818091057)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215045548050.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mHDlqZQO-1614818091059)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215045602218.png)]

多选择结构

if(表达式)—true–执行语句1----else if(表达式2)—else

  • if语句至多有1 个 else 语句,eLse语句在所有的else if 语句之后。
  • if语句可以有若干个else if语句,它们必须在 else语句之前。
  • 一旦其中一个else if语句检测为 true,其他的 else if 以及else语句都将跳过执行
package com.shifei.struck;

import java.util.Scanner;

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

switch多选择结构

switch语句中的变量类型可以是:

  • byte、short、int或者char

  • switch支持字符串String类型了

  • 同时case标签必须为字符串常量或字面量。

    switch(表达式){case value:

    break;

    case value:

    break;

    default:}

switch选择结构(字符)
package com.shifei.struck;

    //switch选择结构(字符) //case 穿透性  switch 匹配一个具体值
public class Domo03 {
        public static void main(String[] args) {
            char grade='s';//改变字符
            switch (grade){
                case 'a':
                    System.out.println("优");
                    break;//可选
                case 'b':
                     System.out.println("良");
                    break;
                case 'c':
                     System.out.println("及格");
                    break;
                case 'd':
                    System.out.println("再接再厉");
                case 'f':
                    System.out.println("挂科");
                default:
                    System.out.println("未知等级");
            }
        }
}

错误易犯:

  • case 语句末尾是:

  • 字符’a’ 字符串"a"

  • break用来终止

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZXisb3dj-1614818091061)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215154405617.png)]

  • 没有break语句程序会一直运行

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zBjTJUDK-1614818091062)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215154814381.png)]

  • default:语句

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8uSXfImQ-1614818091064)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215155048865.png)]

switch选择结构(字符串)
package com.shifei.struck;

    //switch选择结构(字符串)JDK 7新特性 表达式可以是字符串 
public class Domo04 {
    public static void main(String[] args) {
        String name="是非";

        switch (name){
            case "hds":
                System.out.println("是否");
                break;
            case "hd":
                System.out.println("sjh");
                break;
            case "ds":
                System.out.println("sds");
            default:
                System.out.println("非法字符");

        }

    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jebSkt59-1614818091065)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215160335706.png)]

反编译:java----class(字节码文件)—反编译(IDEA)

软件设置—project–project 。。。out路径中

循环结构

  1. while
  2. do…while
  3. for
  4. 增强for循环

while

while(表达式){循环内容}

表达式–true—一直运行

死循环:当while(true)

案例1:输出1~100
package com.shifei.struck.forDomo;

    //输出1~100
public class Domo00 {
    public static void main(String[] args) {
        int i=0;
        while (i<100){
            i++;
            System.out.println(i);//1~100
        }
    }
}
案例2:输出1+2+3…+100=?
package com.shifei.struck.forDomo;

    //输出1++2+3....100=?;
public class Domo01 {
    public static void main(String[] args) {
        int i=1;
        int sum=0;
        while (i<=100){
            sum=sum+i;
            i++;
        }
        System.out.println(sum);//5050
    }
}
package com.shifei.struck.forDomo;

public class Domo3 {
    public static void main(String[] args) {
        int i=0;
        int sum=0;
        while (i<101){
            sum=sum+i;
            i++;
        }
        System.out.println(sum);//5050
    }
}

do while

案例1:输出1+2+。。。+100=?
package com.shifei.struck.forDomo;

    //do..while
public class Domo03 {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0;
        do {
            sum = sum + i;
            i++;
        }
        while (i < 101); {
            System.out.println(sum);//5050
        }
    }
}
package com.shifei.struck.forDomo;

public class Domo04 {
    public static void main(String[] args) {
        int a = 0;

        while (a < 0){///while 语句后不加;
            System.out.println(a);
            a++;

        }
        System.out.println("------------------------------");

        do {
            System.out.println(a);
            a++;
        }
        while (a<0);//do....while语句后加;

    }
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-86hnnHBv-1614818091067)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215205939265.png)]
do while 和while区别
  • while先判断后执行 do while相反
  • do,.while保证被执行一次

For循环

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

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

    语法格式如下:

​ for(初始化;布尔表达式;更新){}

package com.shifei.struck.forDomo;

    //for while 循环比较
public class Domo05 {
    public static void main(String[] args) {
        //初始化条件
        int a = 1;

        //条件判断
        while (a <= 100) {
            //循环体
            System.out.println(a);
            //迭代
            a += 2;
        }
        System.out.println("while循环结束");//100以内奇数

        //初始化 循环体 迭代
        for (int i = 0; i < 100; i++) {
            System.out.println(i);
        }

        System.out.println("for循环结束");//0~100
    }
}
练习1:计算0到100之间的奇数和偶数的和
package com.shifei.struck.forDomo;

    //练习1:计算0到100之间的奇数和偶数的和
public class Domo06
    {
        public static void main(String[] args)
        {
            int sum = 0;
            int sum1 = 0;//偶数和:sum  奇数和:sum1

            for (int i = 0; i < 100; i++) {
                if (i % 2 != 0) {//判断是否是偶数
                    sum += i;
                } else {//否则就是奇数
                    sum1 += i;
                }
            }
                System.out.println("0~100偶数之和为" + sum);
                System.out.println("0~100奇数之和为" + sum1);
        }
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Spi0eTMv-1614818091106)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215215412302.png)]

练习2: 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个练习
package com.shifei.struck.forDomo;

    //练习2: 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个练习
public class Domo07 {
        public static void main(String[] args) {
            for (int i = 0; i < 1000;i++ ) {
                if (i%5==0) {
                    System.out.print(i+"\t");}
                if (i%15==0){
                    System.out.println("\n");
                }
                //print输出完不会换行
                
                //println输出完就会换行

            }
        }
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cEVrjiR9-1614818091109)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215221811741.png)]

练习3: 打印九九乘法表
package com.shifei.struck.forDomo;

    //练习3: 打印九九乘法表
public class Domo08
{
    public static void main(String[] args)
    {
        for (int i = 1; i <= 9; i++)
            /*先打印第一列行当i=1时i1=1
            第2行:i=2时i1=1、2;
            以此类推
             */

        {
            for (int i1 = 1; i1 <=i; i1++)
            {

            System.out.print(i1+"*"+i + "=" +(i*i1)+"\t");
            }
            System.out.println();
        }
    }
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-94l49R3l-1614818091111)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215231323635.png)]

增强for循环

主要用于集合或数组中

package com.shifei.struck.forDomo;

    //增强for循环
public class Domo09
{
    public static void main(String[] args)
    {
        int[] number={10,20,30,40,50};//定义了一个数组

        //遍历两组元素
        for (int i = 0; i < 5; i++)
        {
            System.out.println(number [i]);
        }
        System.out.println("------------------------");

        for (int x:number)//增强for循环    简化程序
        {
            System.out.println(x);
        }
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JeIeHJ35-1614818091112)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215232452859.png)]

break&continue

break: 跳出一个循环,直接结束循环

**continue: 结束本次循环,继续执行下一次循环 **

package com.shifei.struck.forDomo;

    //break
public class Domo10 {
    public static void main(String[] args) {
        int i=0;
        while (i<100){
            i++;
            System.out.println(i);
            if (i==20){
                break;
            }
        }
        System.out.println("1df5");
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1g2o5GGb-1614818091113)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210216012621596.png)]

package com.shifei.struck.forDomo;

    //continue
public class Domo11 {
    public static void main(String[] args) {
        int i=0;
        while (i<100){
            i++;
            if (i%10==0){
            System.out.println();
            continue;
            }
            System.out.println(i);
        }
        System.out.println("shdg");

    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-swyc5J98-1614818091114)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210216013206680.png)]

了解 goto

goto常被用于跳出多重循环。但goto 语句的使用往往会使程序的可读性降低。

Java中依然保留了goto这个关键字留作备用,但这个关键字没有任何作用,只是为了将来可能的扩展,防止使用goto作为程序中的标识符。

虽然Java中的goto不起作用,但Java 中同样可以定义标签。例如:“mylabel:”

练习:打印101~150之间的质数(又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,否则称为合数。)
package com.shifei.struck.forDomo;

    //练习:打印101~150之间的质数  goto
public class Domo12 {
    public static void main(String[] args) {
       outer: for (int i = 101; i < 150; i++) {
            for (int j=2;j<i/2;j++){//小于它的倍数
                if (i%j==0)
                    continue outer;//标签:返回到上次标签所处位置
            }
           System.out.print(i+"  ");
        }
    }
}

练习

  1. 打印三角形

    package com.shifei.struck.forDomo;
    
        //打印三角形
    public class Domo14 {
    
        public static void main(String[] args) {
    
            for (int i = 1; i <= 5; i++) {      //固定在5行中
                for (int j = 5; j >= i; j--) {
                    System.out.print(" ");      //空格隔开
                }  for (int j = 1; j <= i; j++) {
                    System.out.print("*");
                } for (int j = 1; j < i; j++) {
                    System.out.print("*");
                }
                System.out.println(" ");        //输出完后,换行
            }
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值