JavaSE第三天(循环&条件判断)


文章目录

  • JavaSE第三天(循环&条件判断)
  • 1、Scanner类的使用
  • 2、Math的简单使用
  • 3、if的使用
  • 4、switch语句
  • 5、while循环
  • 6、for循环
  • 7、循环嵌套


1、Scanner类的使用

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

public class Demo01 {
    public static void main(String[] args) {
        // 2. 使用 new 关键字创建 Scanner 对象
        // 创建对象需要传入 监听键盘 的流输入对象
        // 语法格式:引用类型 变量名 = new 引用类型(入参);
		Scanner sc = new Scanner(System.in);
        
        // 3. 调用对象的方法
        // 监听键盘,必须输入 String 类型的数据
        // 定义变量接收监听键盘的结果
        String result = scan.next();
        System.out.println("result = " + result);
        
        // 调用键盘必须输入整数的方法
        int i = scan.nextInt();
        System.out.println("i = " + i);
        
        /*
          使用完毕需要关闭资源,因为创建Scanner对象时需要传入一个标准的输入流
          只要涉及到流的操作都需要释放资源,否则,这个资源就得被JVM垃圾回收,去回收,否则程序无法结束
        */
        sc.close();
    }
}

注意next()和nextLine()方法的区别:next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

2、Math的简单使用

public class Demo02 {
	// 入口方法
    public static void main(String[] args) {
    	// 求绝对值 abs();
        int result = Math.abs(-5);
        System.out.println("result = " + result);

        // 平方根 Math.sqrt();
        System.out.println(Math.sqrt(2));

        // 四舍五入函数
        System.out.println(Math.round(1.5));

        // 向下取整
        System.out.println(Math.floor(1.9));

        // 向上取整
        System.out.println(Math.ceil(1.1));
    }
}

Math类中拥有许多关于数学方面的运算,如有需要其他的运算,可以查询官方API

3、if的使用

分类

  • 单分支
public class Demo05 {
    public static void main(String[] args) {
        // 单分支
        int point = 99;// 基本类型变量
        /*
            如果 if (条件表达式 结果是 true 则执行) {
                执行这里的代码
            }
         */
        if (point == 100) {
            System.out.println("带去公园玩耍!");
        }
    }
}
  • 双分支
/*
    双分支
 */
public class Demo06 {
    public static void main(String[] args) {
        int score = 90;//定义分数为90
        // 如果小明考试 100 分 去公园玩耍
        if (score == 100) {
            System.out.println("对小明的奖励:去公园玩耍。");
        } else {
            System.out.println("对小明的惩罚:在家写作业。");
        }
    }
}
  • 多分枝
/*
    多分支
 */
public class Demo07 {
    public static void main(String[] args) {
        int score;// 声明一个分数的变量
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入考试成绩,返回评定结果:");
        score = scan.nextInt();

        // 根据输入的成绩判断返回哪个评定结果
        if (score >= 90) {
            System.out.println("该学生的成绩评定为:优秀");
        } else if (score >= 80 && score <= 89) {
            System.out.println("该学生的成绩评定为:良好");
        } else if (score >= 70 && score <= 79) {
            System.out.println("该学生的成绩评定为:中等");
        } else if (score >= 60 && score <= 69) {
            System.out.println("该学生的成绩评定为:普通");
        } else {
            System.out.println("还需要继续努力。");
        }
    }
}

总结:if条件判断,判断条件大部分都是boolean类型,如果条件判断过多,可以考虑使用switch,像上面的判定成绩就可以考虑使用 switch,而且过多的if else语句也不利于阅读,再加上每次判断都是从头开始判断,如果只有最后一个else判断成功,则会浪费很多资源。所以建议,[1,5]区间之内的条件判断使用if,多于5次条件判断以上的使用switch

4、switch语句

格式:
switch (表达式) {
    case 值1:
    语句体;
    break;
    case 值2:
    语句体;
    break;
    case 值3:
    语句体;
    break;
    default:
    语句体;
}

注意如果没有break,会出现case穿透

case穿透:当条件表达式匹配与某一个case的值时会执行 该case对应的语句体,如果此时这个语句体没有break则会一直往下执行,直至default执行完毕。

public class Demo08 {

    public static void main(String[] args) {
        /*
            100 / 10 = 10
            90 ~ 99 / 10 = 9
            80 ~ 89 / 10 = 8
            70 ~ 79 / 10 = 7
            60 ~ 69 / 10 = 6
         */
        int score;// 声明一个分数的变量
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入考试成绩,返回评定结果:");
        score = scan.nextInt();

        // case 穿透?break 防止 case 穿透
        // 重复的业务逻辑
        switch (score / 10) {
            case 10:
            case 9:
                System.out.println("该学生的成绩评定为:优秀");
                break;
            case 8:
                System.out.println("该学生的成绩评定为:良好");
                break;
            case 7:
                System.out.println("该学生的成绩评定为:中等");
                break;
            case 6:
                System.out.println("该学生的成绩评定为:普通");
                break;
            default:
                System.out.println("还需要继续努力。");
        }
    }
}

该代码就是利用了case穿透的作用,把原本需要重复写的代码减少,阅读性也增加了。

5、while循环

作用:循环即重复地执行一些相同或类似的操作

while(条件){
	循环体 
	迭代因子 
}

可以理解为重复执行的if,当条件成立时,执行大括号里面的内容,但是这个里面的内容一定要有改变条件的迭代因子,否则会出现死循环,当内容执行完成会再次进行判断,成立则执行内容,否则跳出循环

int row = 1;//默认从1开始,因为时九九乘法表所以最大值为9
int cell= 1;//打印内容的次数跟随着行号的变化而变化,第一行,打印内容的次数一定等于1,第二行,打印内容的次数一定等于2 。。。
while(row<=9){//控制打印9行
    //开始打印
    System.out.print(cell+"*"+row+"="+cell*row+"\t");
    //打印完成判断,是否需要换行,判定依据为:我在这一行打印内容的次数是由等于这一行的行数
    if(cell == row){//如果相等说明需要换行
        //换行
        System.out.println();
        //准备打印下一行的数据

        //下一行,行号++
        row++;
        //数据开始也是从1开始,那么打印的次数也需要归为1
        cell=1;
    }else{
        //如果不是相等,说明这一行还有内容需要打印,则打印次数++
        cell++;
    }
}

以while打印99乘法表为例子这里的迭代因子一定时改变row,因为外部定了row是1,不改变则永远都是1,条件永远都为true,这里在cell等于row的时候进行++在原来的基础上+1

6、for循环

作用与while循环相同,只是while循环的它擅长于不知道需要循环多少次,只知道达到什么样的状态我就停止,而for则擅长我知道遍历循环多少次,也是一个比较灵活的循环

结构

for(①初始条件表达式;②布尔表达式;④迭代因子){
	③循环体
}

这里初始条件表达式在整个循环中只执行一次,下一步,进入布尔条件表达式,如果表达式成立则进入循环体中 ,执行完成,开始迭代因子,接着继续判断布尔条件表达式,成立继续循环,后面就都是这样,

int row = 1;//默认从1开始,因为时九九乘法表所以最大值为9
int cell= 1;//打印内容的次数跟随着行号的变化而变化,第一行,打印内容的次数一定等于1,第二行,打印内容的次数一定等于2 。。。
for(;row<=9;cell++){
    //打印
    System.out.print(cell+"*"+row+"="+cell*row+"\t");
    //判断
    if(cell == row){
        System.out.println();
        row++;
        cell=1;
    }
}

这里实现的功能的思想和前面while一直,只不过这里迭代因子不是在循环体里面了,而是在for的小括号里面

7、循环嵌套

多层循环嵌套使用使用业务需求

// 需求:输出5行5列的矩形  '*'
for (int i = 0; i < 5; i++) {// 操作行数
    for (int j = 0; j < 5; j++) {// 操作个数
        System.out.print("*");
    }
    System.out.println();// 换行
}

总结:多层循环中,真正的核心代码就是最内层循环内所写的代码,而外层循环只是辅助内层循环进行处理的,这里,单看内层循环只是在一行内打印5个*,但是需求是打印多行,我们可以在外层循环控制打印的行数,来赋值内层循环 进行打印。