java基础(二)流程控制

HI,大家好,我是Lee

上一篇我们说了java中的数据类型,这篇文章说一下java中的流程控制,也就是循环和判断,流程控制是必须需要掌握的,在工作中用到的地方有很多,好了,话不多说 让我们开始吧。

一、判断

判断

在java中,如果决定是否要执行一段代码,就需要if语句

if语句

if(条件){
    条件满足时执行
}

根据if条件的执行结果,判断是true还是false,JVM决定是否要执行if语句块

例:

int a = 20;
if(a == 20){
    System.out.println("执行这段代码");
}

根据if条件判断 a == 20 为true,所以执行if语句块,执行结果为 输出 a等于20

当if语句块只有一个语句时,可以省略花括号{},使用缩进的方式,但是不建议,如果再想再if语句块中增加代码 还需要增加花括号

int a = 20;
if (a == 20)
    System.out.println("执行这段代码");

else语句

if语句后还可以编写一个else语句块,当if条件判断为false时,执行else语句块

int a = 20;
if (a == 10){
    System.out.println("执行if语句块");
}else {
    System.out.println("执行else语句块");
}

执行上述代码,输出结果为 执行else语句块

else语句块不是必须的

还可以用多个 else if串联

if (a == 10){
    System.out.println("执行if语句块");
}else if (a == 15){
    System.out.println("执行else if语句块-1");
}else if (a == 20){
    System.out.println("执行else if语句块-2");
}else {
    System.out.println("执行else语句块");
}

注意:使用else if串联时要注意判断顺序

int data = 80;
if (data > 10){
    System.out.println("大于10");
}else if (data > 50){
    System.out.println("大于50");
}else if (data > 80){
    System.out.println("大于80");
}else {
    System.out.println("小于等于10");
}

执行上述代码 期望输出 大于50 ,但是实际却输出 大于10 ,因为使用else if串联时,在有一个条件满足时,不会往下执行其他的else if语句

else if 相当于

if (data > 10){
    System.out.println("大于10");
}else {
    if (data > 50){
        System.out.println("大于50");
    }
}

正确的方式应该更改条件

int data = 80;
if (data > 10 && data <= 50){
    System.out.println("大于10");
}else if (data > 50 && data <= 80){
    System.out.println("大于50");
}else if (data > 80){
    System.out.println("大于80");
}else {
    System.out.println("小于等于10");
}

判断引用类型

在java判断值类型的变量相等时,使用 == ,但是判断引用类型变量则需要使用 equals

//我们首先来看使用 == 判断
//首先创建一个学生类
public class Student {
    private String name;
    private Integer age;
}
//创建两个学生对象
Student stu1 = new Student("Lee", 18);
Student stu2 = new Student("Lee", 18);
if (stu1 == stu2){
    System.out.println("相等");
}else {
    System.out.println("不相等");
}
//结果为不想等
//因为 == 比较的是地址值,两个对象虽然值是一样的,但是地址值是不用的 地址值例:com.example.test.Student@241767
//我们再来看使用equals判断
//使用equals首先学生类中要重写equals方法
public class Student {
    private String name;
    private Integer age;

    //重写equals方法
    @Override
    public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Student student = (Student) o;
    return Objects.equals(name, student.name) &&
            Objects.equals(age, student.age);
    }
}
//在进行判断
if (stu1.equals(stu2)){
    System.out.println("相等");
}else {
    System.out.println("不想等");
}
//结果为相等 因为 使用equals方法时比较的是两个对象的值而不是地址值

switch多重判断

除了if语句之外,还有另一个判断语句,是根据某个表达式的结果,分别去执行不同的分支

int a = 1;
switch (a){
    case 1:
        System.out.println("执行选择1");
    case 2:
        System.out.println("执行选择2");
    case 3:
        System.out.println("执行选择3");
}
//执行结果:
    //执行选择1
    //执行选择2
    //执行选择3
//可以发现,a = 1,但是三个选项都输出了,这是因为缺少break中断语句,所以在执行完 case 1后会继续往下执行
switch (a){
    case 1:
        System.out.println("执行选择1");
        break;
    case 2:
        System.out.println("执行选择2");
        break;
    case 3:
        System.out.println("执行选择3");
        break;
}
//执行结果:
    //执行选择1
//现在可以看到 只有case 1被执行

当使用switch语句时,条件没有任何一个case进行匹配时,就需要使用default语句

int a = 20;
switch (a) {
    case 1:
        System.out.println("执行选择1");
        break;
    case 2:
        System.out.println("执行选择2");
        break;
    case 3:
        System.out.println("执行选择3");
        break;
    default:
        System.out.println("没有任何匹配");
        break;
}
//只要a不是1、2、3 就会进入default语句块中

注意:

使用switch语句注意case语句没有花括号,且case具有穿透性,千万不要漏写 break;

switch语句不仅可以判断整数,字符串和枚举都是可以进行判断的

case不需要顺序写,只要有break语句,可以任意顺序写

在java12中升级了 更简洁的switch 语法表达式使用类似模式匹配(Pattern Matching)的方法,保证只有一种路径会被执行,并且不需要break语句

public class Main {
    public static void main(String[] args) {
        String fruit = "apple";
        switch (fruit) {
        case "apple" -> System.out.println("Selected apple");
        case "pear" -> System.out.println("Selected pear");
        case "mango" -> {
            System.out.println("Selected mango");
            System.out.println("Good choice!");
        }
        default -> System.out.println("No fruit selected");
        }
    }
}

注意新语法使用->,如果有多条语句,需要用{}括起来。不要写break语句,因为新语法只会执行匹配的语句,没有穿透效应。

二、循环

循环语句就是让计算机根据条件做循环计算,在条件满足时继续循环,条件不满足时退出循环。java中有三种循环(while、do while、for)

while循环

while循环的基本用法

while (条件表达式) {
    循环语句
}

while循环是先判断后循环,首先判断表达式是否成立 如果为true则继续执行循环,如果为false,则跳出循环

我们使用while循环计算1到100的和

int x = 1;
int sum = 0;
while (x <= 100) {
    sum += x;
    x++;
}
System.out.println("1-100的和等于" + sum);

注意循环内自增变量的位置,如果 x++ 在 sum+=x 之前,那结果就完全不正确了

要注意表达式如果一直为true时,那循环就变成了死循环,一直执行循环内的语句,会占用电脑的cpu,造成电脑卡顿

异常退出逻辑

byte x = 1;
while (x > 0){
    x++;
}
System.out.println(x);

可以看到上述代码,定义了一个字节类型的x,x初始值为1,循环条件是x大于0,循环内x一直自增1,但是循环到第128次还是会退出循环,因为byte类型最大值为127 ,到最大值在自增1的话会变成负数(-128)则条件判断为false,退出循环

do while循环

do while基本用法

do {
    循环语句
}while (条件表达式);

while循环是先判断,后循环,而do while循环则相反,先循环后判断,这就导致了不管条件是否为true,都会执行一次循环

使用do while循环计算1到100的和

int x = 0;
int sum = 0;
do {
    sum += x;
    x++;
}while (x <= 100);
System.out.println(sum);

使用do while循环要注意条件的判断 以及 语句内自增变量的位置

for循环

for循环的基本用法


for (初始条件; 循环检测条件; 循环后更新计数器) {
    循环语句
}

在java中 使用 最广泛的就是for循环

for循环的功能非常强大,它使用计数器实现循环。for循环会先初始化计数器,然后,在每次循环前检测循环条件,在每次循环后更新计数器。计数器变量通常命名为i

使用for循环计算1到100的和

int sum = 0;
for (int i = 0; i <= 100; i++) {
    sum += i;
}
System.out.println(sum);

在for循环执行前,会先执行初始化语句int i=1,它定义了计数器变量i并赋初始值为1,然后,循环前先检查循环条件i<=100,循环后自动执行i++,因此,和while循环相比,for循环把更新计数器的代码统一放到了一起。在for循环的循环体内部,不需要去更新变量i。

循环中止(break、continue)

无论是那种循环 都可以使用break跳出循环以及continue进行下一次循环

首先,我们看一下break,使用for循环跳出

int sum = 0;
for (int i = 0; i <= 100; i++) {
    if (i == 50){
        break;
    }
    sum += i;
}
System.out.println(sum);

上述代码结果sum为 1225,因为当i自增到50时遇到判断,进行了break的操作,跳出了循环,所以直接循环结束,break都是搭配if来使用

注意 break时跳出本层循环,如果是多层循环,break只可以跳出当前一层的循环

我们再看下continue,使用for循环进行下一次循环

int sum = 0;
for (int i = 0; i <= 100; i++) {
    if (i == 50){
        continue;
    }
    sum += i;
}
System.out.println(sum);

上述代码结果sum为5000,因为在循环内有一个判断 在 i 等于50时,进行了一个continue的操作,循环执行时遇到 continue 会直接进行下一次循环,代表本次循环结束

关于java的循环和判断就说到这里啦,有什么想讨论的可以公众号私聊我!

公众号:测试开发Lee

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值