JavaSE学习——流程控制输入输出、三大结构

Java流程控制

用户交互Scanner

Scanner类
  • Scanner对象可以用来实现与用户的交互

  • 在java.util类中,Java5的新特性

  • 用来获取用户输入


next()方法与nextLine()方法区别
  • 这两个方法都是Scannner类的方法

  • 我们从两个小例子上来辨析这两者的区别

小例子(一)

public static void main(String[] args) {
        //创建一个扫描器对象,用于将接受键盘输入
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用next方法接收用户输入:");
        if (scanner.hasNext())
        {
            //使用Next方式接收
            //next方法会等待用户输入
            String str = scanner.next();
            System.out.println("这里输出刚才输入的字符串:"+str);
        }
        //属于IO流的对象使用之后需要关闭
        scanner.close();
    }

输出结果

这里我的输入为hello world,但是输出的值是hello,并不是我们预期的hello world

在这里插入图片描述

小例子(二)

public static void main(String[] args) {
        //创建一个扫描器对象,用于将接受键盘输入
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLLine方法接收用户输入:");
        if (scanner.hasNextLine())
        {
            //使用nextLine方式接收
            //nextLine方法会等待用户输入
            String str = scanner.nextLine();
            System.out.println("这里输出刚才输入的字符串:"+str);
        }
        //属于IO流的对象使用之后需要关闭
        scanner.close();
    }

输出结果

这里我的输入为hello world,输出值确实为预期的hello world
在这里插入图片描述

区别

next()

  • 不但enter是结束符,也会将空格当成结束符,也就是说如果用户输入的字符串中有空格,next()只会将空格之前的字符读取,例如输入hello world,但是实际上只读取了hello
  • 一定要读取到合法字符才会结束输入

nextLine()

  • enter为结束符,读取的是回车之前的所有字符
  • 可以读取带空格的字符串

顺序结构

顺序结构,最简单最基本的结构,从上而下一条一条语句执行

代码

public static void main(String[] args) {
        //顺序结构演示
        System.out.println("第一句");
        System.out.println("第二句");
        System.out.println("第三句");
    }

输出结果
在这里插入图片描述


选择结构

if单选择结构
  • 满足条件执行指定的代码,不满足条件则跳过该段代码的执行
if(布尔表达式)
{
    //如果布尔表达式为真才执行的语句
}

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

小例子

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入内容:");
        String s = scanner.nextLine();
        if(s.equals("Hello"))
        {
            System.out.println(s);
        }
        scanner.close();
    }

执行结果

输入Hello,输出Hello

在这里插入图片描述

输入其他,则不输出

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

if双选择结构
  • 满足条件执行指定的代码,不满足条件则执行另一段代码
if(布尔表达式)
{
    //如果布尔表达式的值为真,则执行这个花括号中的代码
}else{
    //如果布尔表达式的值为假,则执行这个花括号中的代码
}

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

小例子

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要执行的代码:");
        String s = scanner.nextLine();
        if(s.equals("A"))
        {
            System.out.println("这里使用的是A代码");
        }else{
            System.out.println("这里使用的是其他代码");
        }
        scanner.close();
    }

执行结果

若输入A,则输出如下图

在这里插入图片描述

若输入非A,则输出如下图

在这里插入图片描述

if多选择结构
  • 对于成绩的等级的划分,明显if双选择结构不够使了
    • 对于一个问题,现在要对学生成绩进行划分等级
    • 实际上,分数大于90,等级为A
    • 分数大于80,等级为B
    • 分数大于70,等级为C
    • 分数大于60,等级为D
if(布尔表达式 1)
{
    //如果布尔表达式 1的值为真执行代码
}else if(布尔表达式 2)
{
    //如果布尔表达式 2的值为真执行代码
}
else if(布尔表达式 3)
{
    //如果布尔表达式 3的值为真执行代码
}else
{
    //如果以上的布尔表达式的值都不为真则执行此处的代码
}

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

小例子

成绩等级划分

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生成绩:");
        int s = scanner.nextInt();
        if( s>=90 ) {
            System.out.println("学生成绩等级为\"A\"");
        }else if(s>=80){
            System.out.println("学生成绩等级为\"B\"");
        }else if(s>=70){
            System.out.println("学生成绩等级为\"C\"");
        }else{
            System.out.println("学生成绩等级为\"D\"");
        }

        scanner.close();
    }

执行结果

输入为90-100,输出如下图
在这里插入图片描述

输入为66,输出如下图

在这里插入图片描述

嵌套选择结构

使用嵌套的if…else语句也是合法的。

就是说可以在if的花括号中再次使用if…else语句

if(布尔表达式 1)
{
    //如果布尔表达式 1的值为真执行代码
    if(布尔表达式 2)
    {
        //如果布尔表达式 2的值为真执行代码
    }
}
switch多选择结构
  • 判断一个变量与一系列值中的某一个值是否相等,进而选择要执行的分支
  • switch 语句中的变量类型可以为:
    • byte、short、int、char
    • Java SE 7开始,支持String类型
switch(expression){
    case value1 :
        //语句
        break;//可选,直接跳出switch语句
    case value2 :
        //语句
        break;//可选,直接跳出switch语句
    //可以有任意数量的case分支
    default ://可选,case分支都不满足,则执行default分支
        //语句
}

小例子

依据输入的学生成绩等级,来输出学生成绩的评价

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生成绩等级:");
        String s = scanner.next();
        switch (s){
            case "A":
                System.out.println("你的成绩优秀");
                break;
                //缺少这个break语句会出现case穿透现象,即如果输入的为A,那么也会执行第二个case
            case "B":
                System.out.println("你的成绩良好");
                break;
            case "C":
                System.out.println("你的成绩不错");
                break;
            case "D":
                System.out.println("你的成绩合格");
                break;
            default:
                System.out.println("你的成绩不能看");
        }
        scanner.close();
    }

执行结果

输入为A,输出为下图
在这里插入图片描述

输入为非ABCD时,输出结果如下
在这里插入图片描述


循环结构

while循环
  • 布尔表达式为真,便会一直执行其中的内容
  • 我们要避免死循环,要人为控制循环跳出
  • 有些循环是一直执行的,如服务器的请求响应监听
while(布尔表达式)
{
    //循环内容
}

小例子

输出1-5

public static void main(String[] args) {
        int i=1;
        while (i <= 5)
        {
            System.out.println(i);
            i++;
        }
        //-----方法二
//        i = 0;
//        while (i < 5)
//        {
//            i++;
//            System.out.println(i);
//        }
        //-----方法三,使用了break
//        i = 1;
//        while (true)
//        {
//            System.out.println(i);
//            i++;
//            if(i == 6)
//                break;
//        }

    }

执行结果

在这里插入图片描述

do…while循环
  • do…while循环先执行再循环,至少执行一次
  • 先执行一次语句,若满足布尔表达式,则继续循环
do{
    //语句
}while(布尔表达式)
for循环
  • for循环语句是支持迭代的一种通用结构,最有效、最灵活的循环结构
  • for循环执行的次数是在执行前就确定的
for(初始值;布尔表达式;更新)
{
    //语句
}

练习一

计算0-100之间的奇数与偶数的和

public static void main(String[] args) {
        //计算0-100之间的奇数与偶数的和
        int sum = 0;
        int sum1 = 0;
        for(int i=0;i<=100;i++)
        {
            //计算偶数的和
            //若一个数对2求模得0,则其为偶数
            if(i%2==0)
            {
                sum+=i;
            }
            //计算奇数的和
            //若一个数对对2求模不得0,则其为奇数
            if(i%2!=0)
            {
                sum1+=i;
            }
        }
        System.out.println("0-100之间偶数之和为:"+sum);
        System.out.println("0-100之间奇数之和为:"+sum1);
    }

练习二

用for循环输出1-1000之间能被5整除的数,并且每行输出20个

public static void main(String[] args) {
        //用for循环输出1-1000之间能被5整除的数,并且每行输出20个
        int count =0;
        for(int i=1;i<=1000;i++)
        {
            //若对5求模得0则该数可以被5整除
            if(i%5==0)
            {
                count++;
                System.out.print(i+" ");
            }
            //用来控制换行,够20个数就输出换行
            if(count==20)
            {
                //System.out.println();
                System.out.print('\n');
                count=0;
            }
        }
    }

练习三

打印九九乘法表

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+"="+i*j+'\t');
            }
            System.out.println();
        }
    }
增强型for循环(foreach)
  • Java5中引入
  • 用于数组或者集合
for(声明语句:表达式)
{
    //代码语句
}
  • 声明语句:声明新的局部变量,该变量的类型必须与数组元素的类型匹配。其作用域限定在循环语句块,其值与此时的数组元素的值相等
  • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法

小例子

public static void main(String[] args) {
        int [] nums={10,20,30,40,50};
        for (int x :nums) {
            System.out.println(x);
        }
    }

输出结果


break&continue

  • break在任何循环语句的主体部分,可以用来控制循环流程。强制退出循环,不执行后面的语句
  • continue语句用在循环语句中可以用来跳过当前这次循环,即跳过continue后面未执行的语句,之后继续执行循环语句

练习

打印三角形

要求:打印如下图形

      *    
    * * *
  * * * * *  
* * * * * * *

代码

public static void main(String[] args) {
        for(int i=1;i<=4;i++)
        {
            //输出空格
            for(int bc=(4-i)*2;bc>0;bc--)
            {
                System.out.print(" ");
            }
            //三角形主体
            for (int c=1;c<i*2-1;c++)
            {
                System.out.print("*"+" ");
            }
            System.out.print("*");
            System.out.println();
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值