03-Java基础-流程控制语句

流程控制语句

控制台输入

控制台输入是实现用户与程序之间进行相互交互的工具类。
类:java.util.Scanner 类
导包:import 包名.类名; import 包名.*;

步骤:

  1. 导包 import java.util.Scanner; import java.util.*;
  2. 创建控制台输入工具对象 Scanner 对象名 = new Scanner(System.in);
  3. 调用工具对象的方法来获取数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-12jxbtwQ-1689657756562)(D:.java\typora-user-images\image-20230706115542075.png)]

import java.util.Scanner;
public class Test10 {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    // byte
    System.out.println("请输入一个byte的数据");
    byte b = scanner.nextByte();
    System.out.println("接收后的数据:"+b);
    // short
    System.out.println("请输入一个short类型的数据");
    short s = scanner.nextShort();
    System.out.println("接收的数据:"+ s);
    // int
    System.out.println("请输入一个int类型的数据");
    int in = scanner.nextInt();
    System.out.println("接收的数据:"+ in);
    // long
    System.out.println("请输入一个long类型的数据");
    long lo = scanner.nextLong();
    System.out.println("接收的数据:"+ lo);
    // float
    System.out.println("请输入一个float类型的数据");
    float f = scanner.nextFloat();
    System.out.println("接收的数据:"+ f);
    // double
    System.out.println("请输入一个double类型的数据");
    double d = scanner.nextDouble();
    System.out.println("接收的数据:"+ d);
    // boolean
    System.out.println("请输入一个boolean的数据");
    boolean bo = scanner.nextBoolean();
    System.out.println("接收后:"+ bo);
    // String
    System.out.println("请输入一个String的数据");
    String str = scanner.next();  // nextLine();
    System.out.println("接收后的数据:"+ str);
    // char 想要获取,则先以字符串来接收单个的字符,然后从字符串中获取第0个位置的数据即可
    System.out.println("请输入一个字符"); // a
    String st = scanner.next();  // "a"
    char ch = st.charAt(0);  // ’a‘
    System.out.println("接收后的字符:"+ ch);
 }
}

程序执行结构

程序执行结构,其实就是程序在运行中执行的顺序。
分类:

  1. 顺序结构
  2. 选择结构
  3. 循环结构
    顺序结构
    顺序结构是程序的默认执行结构,从上到下的,从左到右的执行。
package day3.test;
public class Test1 {
  // debug调试(断点调试) 1.在行号旁边加入断点 2.以debug模式启动 3.点击下一步执行即可(F8)

  public static void main(String[] args) {
    System.out.println("_____程序的开始________");
    int a = 45;
    a++;
    System.out.println(a);
    a=56;
    a--;
    System.out.println(a);
    System.out.println("------程序结束--------");
 }
}

debug调试(断点调试)步骤:

  1. 在行号旁边加入断点
  2. 以debug模式启动
  3. 点击下一步执行即可(F8)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cGEvbuxT-1689657756562)(D:.java\typora-user-images\image-20230706114059536.png)]

选择结构

选择结构是程序执行的结构之一,该选择结构就是在整个程序执行中的由选择性的执行要执行的代码。
单分支的if语句
单分支的if语句会对if中的条件进行判断,如果为true,则执行;如果为false,则不执行;

分支语句if…else

控制语句if…else…

语法

可以直接看例子更容易理解,注意if后面的表达式的运算结果一定是boolean类型

        第一种结构:
            if(boolean表达式){
                java语句;
            }

        解释:如果if后面的boolean表达式是true就执行大括号里面的java语句
             如果是false就不执行大括号中的java语句                


        第二种结构:
            if(boolean表达式){
                java语句;
            }else{
                java语句;
            }

        解释:如果if后面的boolean表达式是true,就执行if大括号中的java语句,
             不执行else大括号中的java语句。
             如果if后面的boolean表达式是false,就不执行if大括号中的java语句,
             会执行else大括号中的java语句。

        第三种结构:
            if(boolean表达式){
                java语句;
            }else if(boolean表达式){
                java语句;
            }else if(boolean表达式){
                java语句;
            }else if(boolean表达式){
                java语句;
            }else{
                java语句;
            }

        解释:当if后面的boolean表达式是true时,才会执行当前if大括号中的java语句,
             如果if后面的boolean表达式都不是true的话,会执行else中的语句。
             注意:如果有两个以上(包括两个)的if后面boolean表达式是true时,会按照从上到下的顺序只执行最上面if大括号中的语句,最多只会执行一个大括号中的语句。

第一种结构:

import java.util.Scanner;
public class If01 {
    public static void main(String[] args) {

        //年龄改成由用户手动输入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的年龄");
        int age = sc.nextInt();
        //判断年龄是否小于18
        if (age < 18){
            System.out.println("编程从未成年人抓起");
        }
    }
}

第二种结构:

import java.util.Scanner;


public class If02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("今天是否下雨");
        boolean flag = sc.nextBoolean();

        //判断是否下雨来决定带不带伞
        if (flag){
            System.out.println("带伞");
        }else {
            System.out.println("不带伞");
        }

    }
}

模拟登录:

import java.util.Scanner;

/*
    根据用户输入的用户名和密码来判断是否登录成功
    用户名和密码是整数类型
    用户名:1001
    密码:123
 */
public class If03 {
    public static void main(String[] args) {
        //使用快捷键alt + enter 补全等号左边的内容
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        int name = sc.nextInt();
        System.out.println("请输入密码:");
        int password = sc.nextInt();

        //判断是否输入了正确的用户名和密码
        if (1001 == name && 123 == password) {
            System.out.println("登录成功");
        }else{
            System.out.println("登录失败");
        }
    }
}

第三种结构:

import java.util.Scanner;
public class If04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        if (num == 0) {
            System.out.println("我喜欢打篮球");
        } else if (num == 1) {
            System.out.println("我喜欢踢足球");
        } else if (num == 2) {
            System.out.println("我喜欢打排球");
        }else{
            System.out.println("我都喜欢");
        }
    }
}

**注意:**分支语句中,如果只有一条java语句,大括号可以省略,但是不推荐这样使用,建议加上大括号。

/*
注意:分支语句中,如果只有一条java语句,大括号可以省略。
      但是不推荐这样使用,建议加上大括号。
 */
public class If06 {
    public static void main(String[] args) {

    /*    if (5 < 3)
            System.out.println("大于");
            System.out.println("好啊");*/
        /*
            变量的作用域,出了大括号就不认识了
         */
       /* if (5 > 3)
            int age = 15;
        System.out.println(age);*/
       if (5 > 3)
           System.out.println("大于");
       else
           System.out.println("小于");

    }
}

小练习

通过成绩,判断并输出成绩的等级:
如果成绩在90-100之间,程序输出:A
如果成绩在80-89之间,程序输出:B
如果成绩在60-79之间,程序输出:C
如果成绩在0-59之间,程序输出:D

答案

//导入Scanner包
import java.util.Scanner;


public class ScoreGrade {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个成绩");
        //获取输入的成绩
        int x = sc.nextInt();

        if (x >= 90 && x <= 100) {
            System.out.println("A");
        }else if (x >= 80 && x <= 89 ) {
            System.out.println("B");
        }else if (x >= 60 && x <= 79 ) {
            System.out.println("C");
        }else if (x >= 0 && x <= 59 ) {
            System.out.println("D");
        }else {
            System.out.println("成绩格式错误!");
        }

    }
}

控制语句switch

控制语句switch

语法

switch(表达式){

case 值1:
    java语句;
    break;

case 值2:
    java语句;
    break;

case 值3:
    java语句;
    break;

default:
    java语句;
}

例:

    int week = 1;

    switch(week) {
        case 1:
            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;
        case 6:
            System.out.println("今天是星期六");
            break;
        case 7:
            System.out.println("今天是星期日");
            break;
        default:
            System.out.println("数字错误");
    }

执行流程

* 先计算表达式的值
* 然后和case后面的匹配,如果有就执行对应的语句,否则执行default控制的语句

注意:
– 程序遇到break语句结束了,可以不写break,如果不写,则会发生case穿透现象
– defalut语句也可以没有。
– switch后面的括号中可以填写byte、short、char、int类型,即能够自动转换为int类型的都可以,在jdk7版本之后可以填写String类型。
– case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的

例:

String actor = "吴京";

    switch(actor) {
        case "成龙":
            System.out.println("代表作《警察故事》");
        case "李连杰":
            System.out.println("代表作《黄飞鸿》");
        case "吴京":
            System.out.println("代表作《战狼》");
        default:
            System.out.println("我是一个演员");

    }

打印季节:

int month = 3;
switch (month) {
    case 3:
    case 4:
    case 5:
        System.out.println(month + "月是春季");
    break;
    case 6:
    case 7:
    case 8:
        System.out.println(month + "月是夏季");
    break;
    case 9:
    case 10:
    case 11:
        System.out.println(month + "月是秋季");
    break;
    case 12:
    case 1:
    case 2:
        System.out.println(month + "月是冬季");
    break;
    default:
        System.out.println("对不起没有对应的季节");
    break;
}

变量的作用域

变量的作用域:就是变量可以生效的范围和活动空间,是变量定义的开始到变量所属的花括号结束之
间,及其子空间(子花括号中)中。
注意: 在同一个范围中,变量名必须唯一

public class Test6 {
  public static void main(String[] args) {
    // 变量的作用域:变量一旦定义,其作用于变量定义的位置之后及其中的子空间中(子花括号)
    // 注意:在用一个作用域中,变量唯一
    //System.out.println(a); // 之前的范围不可以
    int a = 78;
    System.out.println(a);
    if(a>20){
      System.out.println(a);
      int b = 44;
      // 子空间
     {
        System.out.println(a);
        System.out.println(b);
     }
      System.out.println(b);
   }
    int b = 45;  // 不同的作用域中的另一个b
    //System.out.println(b);
    System.out.println(a);
 }
}

for循环语句

for循环语句

问题
请在控制台里面打印10次HelloWorld。
这时可能你会这么写:

System.out.println("helloworld");
System.out.println("helloworld");
System.out.println("helloworld");
System.out.println("helloworld");
System.out.println("helloworld");
System.out.println("helloworld");
System.out.println("helloworld");
System.out.println("helloworld");
System.out.println("helloworld");
System.out.println("helloworld");

好吧,如果要打印10000次呢?累不死你才怪。
这时就需要使用for循环语句来帮我们解决了。

for循环的语法

for(初始化表达式;条件表达式;循环后的操作表达式) {
    循环体;
}

执行流程

1.执行初始化语句,并且在整个循环过程里面只执行一次

2.执行判断条件语句,看其返回值是true还是false

* 如果是true,就继续执行
* 如果是false,就结束循环,整个流程结束

3.执行循环体语句

4.执行循环后的操作表达式

5.程序回到步骤2继续。

例:

//初始化i的值为0,只要i<10则循环一次执行打印语句,每循环一次,i自增1
for(int i=0;i<10;i++){
    System.out.println("HelloWorld");
}

下面代码中是将k的声明放到了for循环的上面,这样在for循环的下面也能访问k变量了,一般情况下在使用for的时候还是会将变量的声明放到k中。

下面示例中的循环体后表达式是k+=2,这里的k值每次会执行加2操作,即循环体后表达式的写法是多变的,要根据需求灵活使用。

int k;

for(k=0;k<10;k+=2){
    System.out.println("k=" + k); //0 2 4 6 8
}
System.out.println(k);

下面代码中的循环体后表达式是做的自减操作,另外需要注意的是m的初始值是10,条件表达式是m>0

for(int m=10;m>0;m--){
    System.out.println("m=" + m); //10..2 1
}

for循环中的变量

在for循环中定义的变量只能在循环内部访问和使用,循环外是无法访问和使用的,这是java中变量的作用域规定的。

for(int i=0;i<10;i++){
        System.out.println("Hello");
}
//报错,在循环外无法访问和使用i
System.out.println(i);

下面代码中虽然在两个for循环中都定义了同名的变量i,但是分别是在不同的for循环中定义的,所以是可以正常执行的:

for(int i=0;i<10;i++){
    System.out.println("Hello");
}

for(int i=0;i<10;i++){
    System.out.println("World");
}

请问下面代码是否可以正常编译并运行?编译报错,因为变量a是在for循环内部创建的,所以在循环外部无法访问和使用。

for(int i=0;i<10;i++){
    int a = 10;
    System.out.println("Hello");
}

System.out.println(a);

倘若for循环里面的循环体只有一行代码,则大括号可以省略,但是不建议省略,最好写上。

for(int i=0;i<10;i++)
    System.out.println(i);

死循环

如果for循环编写不当,可能会造成死循环,循环会一直执行,在编写程序时一定要避免,下面就是一个死循环,会一直打印Test

for(;;){
    System.out.println("Test");
}

嵌套for循环

for循环语句还可以嵌套使用,也就是说在一个for循环的内部,可以再定义一个for循环,在阅读这种嵌套for循环代码的时候,可以将内部的for循环看做是一个普通的语句,这样会好理解一些

for(int i=5;i>0;i--){
    //因为该for循环是在上面for循环的内部,所以是可以访问变量i的
    for(int j=0;j<i;j++){
        System.out.print(j+" ");
    }
    //换行
    System.out.println();
}	

利用嵌套for循环打印5行10列的*

for(int m = 0; m < 5;m++){
    for(int n = 0; n < 10; n++){
        System.out.print("*");
    }
    System.out.println();
}

练习

1.计算1-100所有的奇数求和

2.在屏幕中打印九九乘法表

答案

1.在for循环里面加上if语句来判断当前循环的数字是否为奇数,思路是先找到1~100之间的数字,然后判断数字是否是奇数,如果是的话再进行求和运算。

int sum = 0;

for(int i=1;i<=100;i++){
    
    if(i%2 != 0){
        //奇数
        //追加
        sum += i;
    }
    
}

System.out.println(sum);

2.九九乘法表一共要输出9行,首先写一个for循环来控制行数:

for (int i = 1; i <= 9; i++) {
        System.out.println(i);
}

接下来比如我要输出九九乘法表的第一行,即1 * 1 = 1,写一个for循环:

for(int j=1; j<=1; j++){
    System.out.print(1 + "*" + j + "=" +1*j + " ");
}

九九乘法表的第二行,即2*1=2, 2 * 2=4

for(int j=1; j<=2; j++){
        System.out.print(2 + "*" + j + "=" +2*j + " ");
}

后面依次类推,可以发现需要修改的地方都是固定的,可以将上面的for循环修改为下面:

int i = 9;
    
for(int j=1; j<=i; j++){
    System.out.print(i + "*" + j + "=" +i*j + " ");
}

只需要将i修改为要输出的行数就可以,而这个变量i其实可以从第一个for循环中获取,将两个循环进行嵌套:

//外层for循环控制换行,变量i是行号
for (int i = 1; i <= 9; i++) {
    //System.out.println(i);
    
    // 输出规律:
    // 第1行,输出1个
    // 第2行,输出2个
    // 第3行,输出3个
    // ...
    // 第9行,输出9个
    // 第i行,输出i个
    
    for (int j = 1; j <= i; j++) {
        // 这里不要换行
        System.out.print(i + "*" + j + "=" + i * j + " ");
    }

    // 注意:上面的for循环结束之后表示一行输出结束了,换行
    System.out.println();

}

while循环语句

while循环语句

while循环的作用跟for一样。语法

初始化语句;
while(boolean表达式) {
    循环体语句;
    控制条件语句;
}

执行过程:

只要boolean表达式里面的结果是true,就会执行while大括号里面的语句,直到boolean表达式的结果变为false,循环结束。while循环的次数是:0-N次

示例1:

int i = 0;
while(i<10){
    i++;
    System.out.println(i); //1 ... 9 10
}

//一定要在while循环体中添加修改boolean表达式状态的代码,保证某次循环后的boolean表达式是false,否则会出现死循环。

示例2:

int i = 0;
while(i<10){
    System.out.println(i); //0... 9
    i++;//将i++放在下面
}

在编写while循环时需要注意不要出现死循环的情况

while(true){
    System.out.println("死循环");
}

while和for的比较

for循环适合确定循环次数的场景

while适合循环次数不确定的场景

当然,在大部分场景下,使用for和while都可以实现需求

练习:

在控制台输入若干正整数,当输入-1的时候表示结束,将这些输入的最大的数打印。

Scanner sc = new Scanner(System.in);

boolean flag = true;

//定义最大值
int max = 0;

while (flag) {
    System.out.println("请输入一个正整数:");
    //获取用户输入的数
    int num = sc.nextInt();

    if (num == -1) {
        //结束循环
        flag = false;
    } else if (max < num) {
        max = num;
    }
}

System.out.println("最大值是:" + max);

循环语句_do_while

循环语句_do…while

语法

初始化语句;
do {
    循环体语句;
    控制条件语句;
}while(boolean表达式);

执行过程:

首先会执行do循环体中的语句,然后运算while中的boolean表达式,如果是true则继续执行do循环体中的语句,如果是false,则循环执行结束。

do里面的语句至少会执行一次,执行之后根据while里面的条件判断语句来判定是否继续循环执行do里面的语句。

注意:while后面的;不要忘记,否则会报错。

例:

int i = 11;
do {
    System.out.println("i = " + i);
    i++;
}
while (i <= 10);

三种循环语句的区别:

  • do…while循环至少执行一次循环体。
  • 而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。

练习

模拟用户登录功能,用户名是1001,密码是123
如果输入正确则登录成功
否则登录失败,如果失败次数超过3次,则不允许用户登录

答案

Scanner sc = new Scanner(System.in);

boolean flag = true;

int count = 0;//计数器

while (flag) {
    System.out.println("请输入用户名:");
    int name = sc.nextInt();
    System.out.println("请输入密码:");
    int password = sc.nextInt();

    //判断是否输入正确
    if (1001 == name && 123 == password) {
        System.out.println("登录成功");
        flag = false;//结束循环
    }else {
        count++;
        //判断count的值是否等于3
        if (count == 3) {
            flag = false;
        }
        System.out.println("登录失败");
    }
}

控制语句_break和continue

By 小猴子1024 |

0 Comment

break

break是java语言中的关键字,中文是打断,终止的意思

  • 可以用在switch语句中,结束分支语句,防止case穿透现象的发生.
  • 可以出现在循环当中,作用是结束整个循环的执行,默认情况下结束离它最近的一个循环.
for(int i=0;i<10;i++){
    System.out.println(i);
    if(i==5){
        break; //只是结束离它最近的一个循环.
        //return; //返回,结束的是方法.
    }
}

System.out.println("Hello World!");

关于return关键在后面方法部分会介绍,return的作用是返回,它的作用不是结束循环的,而是结束方法的,例如main方法。

默认情况下break;语句跳出的是离它最近的循环。

for( int j = 0 ; j < 2 ; j ++ ){

    System.out.println( "--> " + j );

    for( int i = 0 ; i < 10 ; i ++ ){

        if(i == 5){
            //终止的是最近的这个循环。
            break; //默认情况下break;语句跳出的是离它最近的循环。
        }

        System.out.println("i = " + i); 
    }
   
}

break还可以控制结束嵌套循环,下面给循环进行了命名,这样可以break掉指定循环

outerFor:for(int i=5;i>0;i--){
        
    innerFor:for(int j=0;j<i;j++){
                if(j==2){
                    break outerFor;
                }
                System.out.print(j);
            }
            
            System.out.println();
        }

continue

continue中文是继续的意思,程序执行到continue语句时,直接结束本次循环,进入下一次循环。

for(int i=0;i<10;i++){

    if(i==5){
        continue;
    }

    System.out.println(i);
}

continue也可以像break那样加上循环的名字:

outerFor:for(int i=5;i>0;i--){
        
        innerFor:for(int j=0;j<i;j++){
                    if(j==2){
                        continue outerFor;
                    }
                    System.out.print(j);
        }
            
        System.out.println();
    }

break和continue的区别?

假设有10个人参加面试,现在进行到第三个人了,突然,面试官有事了,需要走,那么今天剩下这些人就没有办法继续面试了,显然面试整个结束了。(break)

break还可以控制结束嵌套循环,下面给循环进行了命名,这样可以break掉指定循环

outerFor:for(int i=5;i>0;i--){
        
    innerFor:for(int j=0;j<i;j++){
                if(j==2){
                    break outerFor;
                }
                System.out.print(j);
            }
            
            System.out.println();
        }

continue

continue中文是继续的意思,程序执行到continue语句时,直接结束本次循环,进入下一次循环。

for(int i=0;i<10;i++){

    if(i==5){
        continue;
    }

    System.out.println(i);
}

continue也可以像break那样加上循环的名字:

outerFor:for(int i=5;i>0;i--){
        
        innerFor:for(int j=0;j<i;j++){
                    if(j==2){
                        continue outerFor;
                    }
                    System.out.print(j);
        }
            
        System.out.println();
    }

break和continue的区别?

假设有10个人参加面试,现在进行到第三个人了,突然,面试官有事了,需要走,那么今天剩下这些人就没有办法继续面试了,显然面试整个结束了。(break)

假设有10个人参加面试,现在进行到第三个人了,面试官想要招聘一位女生做秘书,但是这第三个人是一位男士,面试官说:今天咱们就聊到这里吧,下一位。(continue)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值