day07-流程控制

流程控制

与电脑交互的scanner

scanner对象

  • 之前我们学习的基本语法中我们并没有实现程序和人的交互,但Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是Java5的新特性,我们可以通过Scanner类来获取用户的输入
  • 基本语法
Scanner s = new Scanner(System.in);
  • 通过Scanner类的next()与nextLine(方法)获取用户输入的字符串,在读取前我们一般需要使用hasNext()与hasNextlin()判断是否还有输入的数据。

    • 首先创建一个main方法–>调用工具类scanner:new一个scanner(System.in)–>String 输入名= scanner.nextLine()–>判断用户是否还有输入if(hasnextLine()){}。输出用户输入的内容。
  • next()

    1. 一定要读取到有效字符才可以结束输入
    2. 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
    3. 只有输入有效字符后才将其后输入的空白作为分隔符或者结束符
    4. next()不能得到哎呦空格的字符串
    package Scanner;
    
    import java.util.Scanner;
    
    public class Dmeo1 {
        public static void main(String[] args) {
            //创建一个扫描器的对象,用于接收键盘 ‘’
            Scanner scanner = new Scanner(System.in);
            System.out.println("使用next方式接收:");
            //判断用户有没有输入字符串
            if (scanner.hasNext()){
                //使用next方式接收
                String str = scanner.next();
                System.out.println("输入的内容为:"+str);
            }
            //关闭scanner
            scanner.close();//凡是使用IO流的类,用完之后一定要关掉,否则会一直运行,占用资源
        }
    }
    
  • next()

    1. 以Enter为结束符,也就是说next()方法可返回的是输入回车之前输入的所有字符。
    2. 可以获得空白。
    package Scanner;
    
    import jdk.swing.interop.SwingInterOpUtils;
    //Scanner s = new Scanner(System.in);
    
    import java.util.Scanner;
    
    public class Dmeo02 {
        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();
        }
    }
    
package Scanner;

import jdk.swing.interop.SwingInterOpUtils;
//Scanner s = new Scanner(System.in);

import java.util.Scanner;

public class Dmeo03 {
    public static void main(String[] args) {
        //从键盘接收数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLine方式接收");
        //判断是否有输入
            String str = scanner.nextLine();
            System.out.println("输出的内容为:"+str);
        scanner.close();
    }
}

scnner进阶练习

  • 二元求次幂运算练习
package Scanner;
//制作一个二元的次幂计算器
import java.math.BigDecimal;
import java.util.Scanner;

public class Dmeo04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        Double f;
        double p;
        String M;
        System.out.println("请输入数据:");

        if (scanner.hasNextDouble()) {

            f = scanner.nextDouble();//输入Double类型数据,比如输入2.0

            System.out.println("输入次幂数:");//提示输入

            p = scanner.nextDouble();//换行输入Double类型数据,比如输入3.0

            System.out.println("输出的值为:" + Math.pow(f, p));  //输出的值为f的p次幂,8
        }

        scanner.close();
    }
}
  • 求和及平均数练习
package Scanner;

import java.util.Scanner;

public class Dmeo05 {
    public static void main(String[] args) {
        //我们可以输入多个数字,求其总和与平均数,每输入一个数字用回车键确认,通过输入非数字来结束输入并输出结果
        Scanner scanner = new Scanner(System.in);

        double sum = 0;//初始一个和

        int m = 0;//定义个数

        System.out.println("请输入数据:");
        //通过循环语句判断是否还有输入,并对每一次输入进行求和和统计个数
        while (scanner.hasNextDouble()) {   //while是一个循环语句,
            double x = scanner.nextDouble();//定义输入的类容,并判断输入类容是否为条件类型
            m = m+1;//m=m++,将输入的个数赋值给m
            sum = sum + x;//将输入的数值求和赋值给sum2
            System.out.println("这是您输入的第"+ m + "个数据,和为:"+ sum);
        }

        System.out.println(m + "个数的平均值为:"+ sum/m);
        System.out.println(m + "个数的和为:"+sum);
	
        scanner.close();
    }
}

顺序结构

  • java的基本结构就是顺序结构,除非特别指明,否者就是按顺序一句一句的执行。
  • 顺序结构是最简单的语法结构。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R33wjQih-1635855204968)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211024171132967.png)]
  • 语句与语句之间,框与 框之间是按照从上到下的顺序进行的,它是由若干个一次执行的处理步骤组成的,它是任何算法都离不开的一种基本的算法结构
package struct;

public class SunXuDemo01 {
    public static void main(String[] args) {
        System.out.println("hello1");
        System.out.println("hello2");
        System.out.println("hello3");
        System.out.println("hello4");
        System.out.println("hello5");
        /*输出的顺序为
        hello1
        hello2
        hello3
        hello4
        hello5
         */
    }
}

选择结构

  • 选择结构的类型
    • if单选择结构
    • if双选择结构
    • if多选择结构
    • 嵌套的if结构
    • switch多选择结构

if单选择结构

  • 我们很多时候需要去判断一个东西是否可行,然后我们才会去执行,这样一个过程在程序中用if语句来表示
  • 语法
if(布尔表达式)//如果布尔表达式为true将执行的语句	
image-20211024172724701
package struct;

import java.util.Scanner;

public class IfDemo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输出一个内容:");
        String s = scanner.nextLine();
        if (s.equals("hello")) {   //s.equals:判断字符串是否相等
            System.out.println("输出的内容为:" + s);//如果输入的值为设定值,才会输出结果,如果输出的值不是设定值,则不会输出结果
        }
        scanner.close();
    }

}

if双选择结构

  • 现在有个需求,公司要收购一个软件,成功了,给人支付100万元,失败了,自己找人开发。这样的用一个if就告白不顶,我们需要有两个判断,需要一个双选择结构,所以就有了if-else结构。
  • 语法image-20211024174358897
if(布尔表达式){
    //如果布尔表达式为true
}else{
    //如果布尔表达式为false
}
package struct;

import java.util.Scanner;

public class IfDemo02 {
    public static void main(String[] args) {
        //考试结果大于60及格,否则不及格
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入分数");
        int score = scanner.nextInt();
        if (score>=60){
            System.out.println("及格");//输入大于60的输出及格
        }else {
            System.out.println("不及格");//输入不在这个范围内的不及格
        }
    }
}

if多选择结构

  • 我们发现刚才的代码不符合实际情况,真实情况还可能存在ABCD…等多种结果,存在区间多级判断。比如90-100就是A,80~90就是B…。在生活中我们的选择常常也不只是两个,所以我们需要一个多选择结构来处理这些问题。
  • 语法image-20211024180113492
if(布尔表达式1){
    //如果布尔表达式1的值为true
}else if (布尔表达式2){
    //如果布尔表达式2的值为true
}else if (布尔表达式3){
    //如果布尔表达式3的值为true
}else//如果以上布尔表达式的值都不为true
package struct;

import java.util.Scanner;

public class IfDemo03 {
    public static void main(String[] args) {
        //将成绩分为多个等及
        /*
        if 语句至多有一个 else 语句,else 在所有 else if 语句之后,
        if 语句可以有多个 else if 语句,他们必须在 else 语句之前
        如果其中一个 else if 被判断为 true,则结束判断,其它的 else if 及 else 语句将被跳过。
         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入成绩");
        int score = scanner.nextInt();
        if (score == 100) {
            System.out.println("恭喜满分");
        }else if (80 <= score && score< 100){
            System.out.println("优秀");
        }else if (70 <= score && score< 80){
            System.out.println("良好");
        }else if (60 <= score && score< 70){
            System.out.println("及格");
        }else if (0 <= score && score< 70){
            System.out.println("不及格");
        }else {
            System.out.println("成绩不合法");
        }
        scanner.close();
    }
}

嵌套的if结构

  • 使用嵌套的 if…else 语句是合法的。也就是说你可以在 if 或者 else if 语句中使用 if 或者 else if 语句。你可以像 if 语句一样嵌套 else if…else
  • 语法
if(布尔表达式 1){
    如果布尔表达式 1的值为true执行代码
    if(布尔表达式 2){
        如果布尔表达式 2的值为true执行代码
    }
}

swich多选择结构

  • 多选择结构还有一个实现的方法就是 switch case 语句

  • switch case 语句判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支。

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

    • byte、short、int或者char。
    • 从Java SE 7 开始,switch 支持字符串 String 类型值了。
    • 同时 case 标签必须为字符串常量或者自变量。
    package struct;
    
    public class SwitchDemo01 {
        public static void main(String[] args) {
            //case 穿透,break 跳出循环,如果不加 break ,则会被击穿,所有的条件都会被输出。case 语句必须加 break 。
            // switch 匹配一个具体的值
            char grade = 'C';
            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("还需努力");
                    break;
                case 'E':
                    System.out.println("挂科");
                default:
                    System.out.println("未知等级");
            }
        }
    }
    

循环结构

  • while 循环
  • do…while 循环
  • for 循环
  • 在Java 5中引入了一种主要用于数组的增强型 for 循环

while 循环

  • while 是最基本的循环,它的结构为:
while(布尔表达式){
    //循环内容
}
  • 只要布尔表达式为 true ,循环就会一直执行下去。

  • 我们大多数情况是会让循环停止下来的,我们需要让表达式失效的方式结束循环。

    package struct;
    //有限循环
    public class WhileDmeo01 {
        public static void main(String[] args) {
            int i = 0;
    
            while (i<102){           //定义循环的范围,让循环停下来
                i++;
                System.out.println(i);//当i=102时,程序停止
            }
        }
    }
    
  • 少部分情况需要循环一直执行,比如服务器请求响应监听等。

  • 循环条件一直为 true 就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环。会影响程序性能或者找出程序卡死崩溃。

  • 思考:计算1+2+3+…+100

    package struct;
    //计算1+2+2+...+100=?
    public class WhileDmeo02 {
        public static void main(String[] args) {
            int i = 0;      //初始i=0
            int sum = 0;    //初始sum=0
            while (i<=100){  //定义范围 i<100
                i++;        //i自增
                sum = sum + i;//让sum=sum+i
                System.out.println(sum);//输出sum=5050
                System.out.println(i);//输出i=i++=100
            }
        }
    }
    

do…while 循环

  • 对于 while 语句二元,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
  • do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次,do while 是每次先执行才会判断是否满足条件是否继续执行。
do{
    //代码语句
}while(布尔表达式)
package struct;

public class DoWhileDmeo01 {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0;
        do {
            i++;
            sum=sum+i;
        }while (i<100);
        System.out.println(sum );//输出5050
    }
}
  • while 和 do…while 的区别

    • while 先判断后执行do…while 是先执行后判断。

    • do…while 总是保证循环体至少被执行一次!这是他们的主要区别。

      package struct;
      // while 和 do while 的区别
      public class DoWhileDmeo02 {
          public static void main(String[] args) {
              int a = 0 ;
              while (a< 0){
                  a++;
                  System.out.println(a);//不会输出内容,while 循环是先判断,后执行。
              }
              System.out.println("-------------------------------------------------");
              do {
                  a++;
              }while (a< 0);
              System.out.println(a);//输出 0 ,do while 循环换是先执行后判断
          }
      }
      

for 循环※

  • 虽然所有循环结构都可以用 while 或者 do…while 表示,但Java提供了另一种语句——for 循环,使一些循环结构变得更加简单。
  • for 循环语法是支持 迭代的一种通用结构,是最有效、最灵活的循环结构。
  • for 循环执行的次数是在执行前就确定的。语法格式如下:
for(初始化;布尔表达式;更新)//代码语句
练习1:计算0~100直接奇数、偶数的和。
package struct;

public class ForDemo01 {
    public static void main(String[] args) {
        //输出100以内的奇数、偶数和
        int oddsum = 0;
        int evensum = 0;
        for (int i = 0; i <= 100; i++) {
            if (i%2!=0){  //i/2的模不等于0
                oddsum+=i;
                System.out.println("奇数和等于:"+oddsum);//输出奇数之和,奇数和等于:2500
            }else {
                evensum+=i;
                System.out.println("偶数和等于:"+evensum);//输出偶数之和,偶数和等于:2550
            }

        }
    }
}
练习2:用while或for循环输出1~1000之前能被5整除的树,并且每行3个。
package struct;

public class ForDemo02 {
    //输出1000以内的所有整除5的值,每三个换行
    public static void main(String[] args) {
        int a = 0;
        for (int i = 0; i <= 1000; i++) {
            if (i%5==0){                    //定义整除5的数
                System.out.print(i+" ");    //输出整除5的数+空格
                if (i%15==0){               //选择整除15的数
                    System.out.println();   //输出换行
                }
            }
        }
    }
}
练习3:打印九九乘法表。
package struct;

public class ForDemo03 {
    //输出9 9 乘法表
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {      //先定义一个1~9的for循环

            for (int a = 1;a<= i;a++ ){     //在上面这个循环的基础上,在进行每一次循环的时候,将这个for循环里面的条件全部循环一次。为了避免重读,条件为:a<=i。

                System.out.print(i+"×"+a+"="+a*i+"  ");//输出循环
                if (a>=i){
                    System.out.println();   //当循环完9之后进行换行
                }
            }
        }

        }
    }

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

增强for循环

  • 这里我们只是做一个了解,之后学习数组的时候我们会重点使用。
  • Java 5 引入了一种主要用于数组或集合的增强型 for 循环。
  • Java 增强 for 循环语法格式如下:
for(声明语句:表达式)//代码语句
  • 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
  • 表达式:表达式是访问的数组名,或者是返回值为数组的方法。

break continue

break

在任何循环语句的均可用break 控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用,用于防止case击穿)

package struct;

public class BreakDemo01 {
    //break 终止循环
    public static void main(String[] args) {
        int i= 0 ;
        while (i<100){
            i++;
            System.out.println(i);
            if (i==30){
                break;//终止循环,循环进行到30就停止了
            }
        }
    }
}

continue 语句

用在循环语句体中,用于跳过某次循环过程,进行下一次是否执行循环的判定。

package struct;
public class ContinueDemo02 {
    //输出1~100中不能被整除10的数
    public static void main(String[] args) {
        for (int i = 0; i <= 100; i++) {  //定义一个0~100的for循环
            if (i % 10 == 0) {            //如果这个数能整除 10,则换行并 跳过此次循环的结果
                System.out.println();
                continue;                 //continue,跳过此次循环的将结果。
            }
            System.out.print(i + "  ");   //输出
        }
    }
}

关于goto关键字

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

public class GoToDemo01 {
    //打印100~150之间的质数
    public static void main(String[] args) {
        int count = 0;
        //不建议使用
        author:for (int i = 100; i < 150; i++) {  //输入标签:author,标签内容为后面的for循环
            for (int a = 2;a < i/2;a++){          //定义一个a的for循环,为了输出质数,a最小为2,最大为i/2,a自增循环
                if (i%a == 0){
                    continue author;              //当i能整除a时,跳过循环,
                }
            }System.out.print(i + "  ");
        }
    }
}

打印三角形

package struct;

public class TextDemo01 {
    public static void main(String[] args) {
        //打印5行的三角形
        for (int i = 1; i <= 5; i++) {      //定义五行的for循环
            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();
        }
    }
}

i + " ");
}
}
}


### 打印三角形

```java
package struct;

public class TextDemo01 {
    public static void main(String[] args) {
        //打印5行的三角形
        for (int i = 1; i <= 5; i++) {      //定义五行的for循环
            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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值