Java流程控制(循环结构,选择结构,Scanner输入)

java流程控制

用户交互Scanner

Scanner对象

  • 前一篇里面没有实现程序与人的交互,Java里面有一个工具类,我们可以用来获取用户的输入。java.util.Scanner。

  • 基本语法:

Scanner s= new Scanner(System.in);
  • 通过Scanner类的next()和nextLine()方法获取输入的字符串,使用hasNext()与hasNextLine()来判断是否还有输入数据。

实例:1.这里采用next方法

import java.util.Scanner;

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

        //使用next方法接收
        System.out.println("使用next方法接收");

        //判断用户有没有输入字符串,if是判断语句
        if(s.hasNext()){
            String str = s.next();//定义一个字符串str接收输入的字符串

            System.out.println("输入的内容是"+str);//打印输入内容
        }

        //凡是属于IO流的类如果不关闭会一直占用资源,养成好的习惯
        s.close();//关闭s

    }
}

我们输入 hello world

可以看到结果只输出了hello

2.这里采用nextLine方法

import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        //这里可以参照上面注释
        Scanner scanner = new Scanner(System.in);

        System.out.println("使用nextLine方式接收");

        if(scanner.hasNextLine()){
            String str = scanner.nextLine();
            System.out.println("接收的内容为"+str);
        }
        scanner.close();
    }
}

我们还是输入 hello world

我们可以看到输出结果为hello world

好了,这里我们总结一下

  • next():

    1. 一定要读取到有效字符后才可以结束输入。

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

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

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

  • nextLine():

    1. 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
    2. 可以获得空白。

除了上面的next()和nextLine()方法以外,还有nextInt():接收整数,nextDouble():接收小数等方法,可以去百度或者查JDK的API。


流程控制

顺序结构

  • Java的基本结构就是顺序结构:一句一句执行
  • 顺序结构是最简单的算法结构
  • 语句与语句之间,是按照从上往下的顺序执行,他是任何一种算法都离不开的一种算法结构。

示例:

//顺序结构演示
public class Demo03 {
    public static void main(String[] args) {
        //下面这些语句会按顺序执行
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
        System.out.println(4);
        System.out.println(5);
    }
}

结果:


选择结构

if单选结构
  • 很多时候都需要去判断一个东西是否可行,然后执行,这样的语句用if语句来表示

  • 语法:

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

    这里太简单了,而且前面也有演示就不做专门示例了

if双选结构
  • 双选择结构也是非常常见的,用if…else语句来表示

  • 语法

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

    运用示例:

    import java.util.Scanner;
    
    //if双选择结构
    public class Demo04 {
        public static void main(String[] args) {
            
            Scanner scanner = new Scanner(System.in);
    
            String str = scanner.nextLine();
            //这里判断输入的字符串是否为"对",equal()是一个判断字符串相等的方法
            if(str.equals("对")){
                System.out.println("输入正确");
            }else {
                System.out.println("输入错误");
            }
        }
    }
    

    我们先输入正确的“对”

再输入错误的内容

if多选择结构
  • 在实际情况中选择的个数可能会很多,这里需要用多选择结构if…else if…else

  • 语法:

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

    示例

    if 语句至多有1个else语句,else语句在所有else if语句之后.

    一旦里面有一个布尔表达式为true,剩下的else if和最后的else都将跳过执行

    import java.util.Scanner;
    
    //多选择结构
    public class Demo05 {
        public static void main(String[] args) {
            //规定60分以下为不及格,60-85为良,85分以上为优秀
            Scanner scanner = new Scanner(System.in);
            int grade = scanner.nextInt();//定义输入成绩的变量grade
            //多选择判断
            if(grade<60){
                System.out.println("不及格");
            }else if(60<=grade&&grade<85){
                System.out.println("良");
            }else {
                System.out.println("优秀");
            }
        }
    }
    

    当输入55时

    当输入65时

    当输入90时

嵌套的if结构
  • 就是在符合条件if语句里面继续判断嵌套if

  • 语法:

    if(布尔表达式){
        //如果布尔表达式1值为true执行语句
        if(布尔表达式 2){
            //如果布尔表达式2的值为ture执行语句
        }
      
    }
    
switch多选择结构
  • 还有一种多选择结构就是switch。

  • switch case语句判断一个变量与一系列值中某一值是否相等。

  • 语法:

    switch (expression){//这里expression是被判断的变量
        case value1:
            //被执行的语句
            break;//可选
        case value1:
            //被执行的语句
            break;//可选
        default://可选
            //以上value值都不相等就执行这里的语句
            //执行的语句
    }
            
    

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

    1. byte.short、int或者char。

    2. 从Java SE 7开始

    3. switch支持字符串 String类型了

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

示例:

//switch演示
public class Demo06 {
    public static void main(String[] args) {
        char grade = 'C';
        switch (grade){
            case 'A':
                System.out.println("优秀");

            case 'B':
                System.out.println("良好");

            case 'C':
                System.out.println("及格");

            case 'D':
                System.out.println("不及格");
            default:
                System.out.println("未知等级");
        }
    }
}

上面的代码没有添加break(可选),因为我想看看后果,输入结果为下图

原因:因为没有写break造成case穿透(从匹配到的结果开始执行下面每一条语句)

所以我们添加上break后

结论:虽然break;不添加没有报错,但是也会引起结果不理想。


循环结构

while循环
  • while是最基本的循环,它的结构为

    while(布尔表达式){
        //循环内容
    }
    
    • 只要布尔表达式为true,循环就会一直执行下去。
    • 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。
    • 少部分情况需要循环一直执行,比如服务器的请求响应监听等。
    • 循环条件一直为true就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环。会影响程序性能或者造成程序卡死奔溃!

示例:

//while演示
public class Demo07 {
    public static void main(String[] args) {
        //循环扣666
        int i = 0;//计数循环次数
        while(i<3){//循环扣3次6
            System.out.print(6);//不换行输出一个6,print是不换行输出,println是输出后换行
            i++;//计数一次循环,每次循环加一
        }
    }
}

输出结果为:

do…while 循环
  • 对于while循环来说,如果不符合条件,他一次循环都不会执行,有时候我们需要先执行才能判断,这时候就用do…while

  • do…while和while使用方法类似,这里不做示例

  • 语法:

    do{
        //代码语句
    }while(布尔表达式)

    注意这里;容易漏掉

for 循环

虽然所有的循环结构都可以用while,do…while来表示,Java还是有一种叫for的循环,可以让一些循环变的简单。

  • for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
  • for循环执行的次数是在执行前就确定的。语法格式如下:
for(初始化;布尔表达式;更新){
    //代码语句,也叫循环体
}

下面拿1加到100作为示例:

//for循环
public class Demo08 {
    public static void main(String[] args) {
        //1+..100
        int sum = 0;//定义一个变量:总和
        //循环结构
        
           //初始化值 //条件判断 //迭代
        for(int i=0;  i<100;  i++){//这里i是从0开始,到99刚好循环100次
            sum+=i+1;//这里是偷懒写法,跟sum=sum+i+1一个意思,这里i初始为0,而我们要从1开始累加,所以i+1
        }
        System.out.println("1累加到100结果为"+sum);//打印结果
    }
}

关于for循环有以下几点说明:

  • 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句
  • 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。再次检测布尔表达式。循环执行上面的过程。
增强for循环
  • java5之后引入的主要用于数组和集合的增强For循环

  • 语法格式:

    for(声明语句 :表达式){
        //代码句子
    }
    
    • 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。
    • 其作用域限定在循环语句块,其值与此时数组元素的值相等。
    • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

示例:

//增强for循环演示
public class Demo09 {
    public static void main(String[] args) {
        int[] nums = {10,10,154,147,15};//这里定义一个数组
        //增强for循环遍历数组nums
        for (int num : nums) {//解释:这里就是把集合nums里面的每一个元素按照从前往后的顺序赋予num,直到nums集合中没有元素
            System.out.println(num);
        }
    }
}

break continue goto

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

示例:

public class Demo010 {
    public static void main(String[] args) {
        //我们规定在打印到50的时候退出循环
        for (int i = 0; i < 100; i++) {

            System.out.println(i);
            if(i==50){
                break;//i=50时终止循环
            }
        }
    }
}

结果如图:

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

示例:

public class Demo11 {
    public static void main(String[] args) {
        //规定在i=50时,跳过50不输出,继续输出后面的
        for (int i = 0; i < 100; i++) {
            if(i==50){
                continue;//跳过50
            }
            System.out.println(i);
        }
    }
}

结果如图:

goto(不需要掌握,了解一下)
  • goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子—带标签的break和continue.
  • “标签”是指后面跟一个冒号的标识符,例如🏷
  • 对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方.

本篇文章主要是个人的学习日记,希望各位大佬指正

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值