第四讲 Java语法基础——语句

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yerenyuan_pku/article/details/81545976

在这一讲中,我将流程控制语句分为判断结构、选择结构、循环结构以及其他流程控制语句。

判断结构

if语句中有一种格式如下:

if (关系表达式) {
    语句体1;
} else {
    语句体2;
}

有的时候可以简写成三元运算符的格式:

变量 = (条件表达式) ? 表达式1 : 表达式2; 

好处当然是可以简化if else格式的代码啊!但有一个弊端,因为是一个运算符,所以运算完必须要有一个结果。
下面分别用二个例子来讲解if语句的使用。

  • 例一,根据用户的给定的数值,显示该数值对应的星期。如:2,星期二。

    class IfTest 
    {
        public static void main(String[] args) 
        {
            /*
            需求:根据用户的给定的数值,显示该数值对应的星期。如:2,星期二。
            思路:
                1,咋获取这个数值呢?来源有很多,不确定,只要是不确定的数据,都用变量存储。
                   只要操作该变量即可。
                2,数值不确定,如何显示对应的星期呢?那就需要对该数值进行判断。
                3,咋显示呢?通过输出语句就可以显示在屏幕上。
            步骤:
                1,定义变量,记录数据。
                2,通过判断结构语句对该变量进行判断。
                3,根据不同的条件,通过输出语句显示不同的结果。
    
            */
    
            // 1,定义变量,记录数据。
            int week = 9;
    
            // 2,通过判断结构语句对该变量进行判断。
            if (week == 1)
                // 3,根据不同的条件,通过输出语句显示不同的结果。
                System.out.println(week + "对应的是星期一");
            else if (week == 2)
                System.out.println(week + "对应的是星期二");
            else if (week == 3)
                System.out.println(week + "对应的是星期三");
            else if (week == 4)
                System.out.println(week + "对应的是星期四");
            else if (week == 5)
                System.out.println(week + "对应的是星期五");
            else if (week == 6)
                System.out.println(week + "对应的是星期六");
            else if (week == 7)
                System.out.println(week + "对应的是星期日");
            else
                System.out.println(week + "没有对应的星期");
        }
    }
  • 例二,根据用户的给定月份数据,显示该月份在哪个季节。

    • 第一种方式:

      //需求:根据用户的给定月份数据,显示该月份在哪个季节。
      // 3,4,5 春季  6,7,8 夏季  9,10,11 秋季  12,1,2 冬季
      class IfTest {
          public static void main(String[] args) {
              int x = 4;
      
              if(x == 3 || x == 4 || x == 5) {
                  System.out.println(x + "春季");
              } else if(x == 6 || x == 7 || x == 8) {
                  System.out.println(x + "夏季");
              } else if(x == 9 || x == 10 || x == 11) {
                  System.out.println(x + "秋季");
              } else if(x == 12 || x == 1 || x == 2) {
                  System.out.println(x + "冬季");
              } else {
                  System.out.println(x + "月份不存在");
              }
          }
      }
    • 第二种方式:

      class IfTest {
          public static void main(String[] args) {
              int x = 4;
      
              if(x > 12 || x < 1) {
                  System.out.println(x + "月份不存在");
              } else if(x >= 3 && x <= 5) {
                  System.out.println(x + "春季");
              } else if(x >= 6 && x <= 8) {
                  System.out.println(x + "夏季");
              } else if(x >= 9 && x <= 11) {
                  System.out.println(x + "秋季");
              } else {
                  System.out.println(x + "冬季");
              } 
          }
      }

选择结构

switch语句的格式如下:

switch (表达式) {
  case1:
    语句体1;
    break;
  case2:
    语句体2;
    break;
  …
  default:
    语句体n+1;
    break;
}

对于该语句,重点知道如下四点:

  1. switch语句选择的类型只有四种:byte,short,int,char。但JDK7.0对switch语句进行了增强,可以判断字符串,JDK5.0对switch语句也进行了增强,可以对枚举类型进行判断。
  2. case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
  3. 结束switch语句的两种情况:遇到break或者执行到switch语句结束。
  4. 如果匹配的case或者default没有对应的break,那么程序会继续向下
    执行,运行可以执行的语句,直到遇到break或者switch结尾结束(switch特性——case穿透性)。

观察下面的代码,你知道输出的是什么吗?

int x = 3;

switch(x) { // byte,short,int,char
    default:
        System.out.println("d");
    case 4:
        System.out.println("a");
    case 6:
        System.out.println("b");
        break;
    case 2:
        System.out.println("c");
        break;
}

以上代码输出:

d
a
b

下面分别用二个例子来讲解switch语句的使用。

  • 例一,根据用户的给定的数值,显示该数值对应的星期。如:2,星期二。

    class SwitchTest 
    {
        public static void main(String[] args) 
        {
            // 需求1:根据用户的给定的数值,显示该数值对应的星期。如:2,星期二。
            int week = 9;
    
            switch (week)
            {
                case 1:
                    System.out.println(week + "对应的是星期一");
                    break;
                case 2:
                    System.out.println(week + "对应的是星期二");
                    break;
                case 3:
                    System.out.println(week + "对应的是星期三");
                    break;
                case 4:
                    System.out.println(week + "对应的是星期四");
                    break;
                case 5:
                    System.out.println(week + "对应的是星期五");
                    break;
                case 6:
                    System.out.println(week + "对应的是星期六");
                    break;
                case 7:
                    System.out.println(week + "对应的是星期日");
                    break;
                default:
                    System.out.println(week + "没有对应的星期");
                    break;
            }
        }
    }
  • 例二,根据用户的给定月份数据,显示该月份在哪个季节。

    class SwitchTest {
        public static void main(String[] args) {
            int x = 4;
    
            switch(x) {
                case 3:
                case 4:
                case 5:
                    System.out.println(x + "春季");
                    break;
                case 6:
                case 7:
                case 8:
                    System.out.println(x + "夏季");
                    break;
                case 9:
                case 10:
                case 11:
                    System.out.println(x + "秋季");
                    break;
                case 12:
                case 1:
                case 2:
                    System.out.println(x + "冬季");
                    break;
                default:
                    System.out.println("nono");
            }
        }
    }

if语句和switch语句的区别

if和switch语句很像,具体什么场景下,应用哪个语句呢?如果判断的具体数值不多,而且符合byte、short、int、char这四种类型,虽然两个语句都可以使用,但建议使用switch语句,因为效率稍高。其他情况如对区间判断,对结果为boolean类型的判断,使用if,if的使用范围更广。

循环结构

什么时候使用循环结构呢?当要对某些语句执行很多次时,就使用循环结构。循环结构这一节重点讲for循环语句,因为其在程序中应该是最常用的吧!

for循环语句

格式:

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

当for循环写成如下代码时,你觉得输出结果会是什么?

int x = 1;
for (System.out.println("a"); x < 3; System.out.println("c"), x++) {
    System.out.println("d");
}

输出结果为:

a
d
c
d
c

你可以试着运行如下程序代码:

class ForDemo {
    public static void main(String[] args) {
        for (int x = 0; x < 3; x++) {
            System.out.println("x = " + x);
        }
        //System.out.println("x ======= " + x);

        int y = 0;
        while (y < 3) {
            System.out.println("y = " + y);
            y++;
        }
        System.out.println("y ======= " + y);
    }
}

从打印结果,你是不是可以得出结论:

  1. 变量有自己的作用域,对于for来讲,如果将用于控制循环的增量定义在for语句中,那么该变量只在for语句内有效,for语句执行完毕,该变量在内存中被释放。而while循环使用的变量在循环结束后还可以继续使用。
  2. for和while可以进行互换。如果需要定义循环增量,用for更为合适。

下面再用二个例子来加强for循环语句的练习。

  • 获取1~10的和,并打印。

    class ForTest2 {
        public static void main(String[] args) {
            int sum = 0;
            for (int x = 1; x <= 10; x++) {
                sum += x;
            }
            System.out.println("sum = " + sum);
        }
    }

    其实这就是累加思想。原理:通过变量记录住每次变化的结果,并通过循环的形式,进行累加动作。

  • 获取1~100之间7的倍数的个数,并打印。

    /*
    获取1~100之间7的倍数的个数,并打印
    
    思路:
    1.先对1~100进行循环(遍历)
    2.在遍历的过程中,定义条件,只对7的倍数进行操作
    3.因为7的倍数不确定,只要符合条件,就通过一个变量来记录这个变化的次数。
    
    步骤:
    1.定义循环语句,选择for语句
    2.在循环中定义判断,只要是7的倍数即可,使用if语句。条件:7的倍数 x % 7 == 0;
    3.定义变量,该变量随着7的倍数的出现而自增
    */
    class ForTest3 {
        public static void main(String[] args) {
            int count = 0;
            for (int x = 1; x <= 100; x++) {
                if(x % 7 == 0) {
                    count++;
                }
            }
            System.out.println("count = " + count);
        }
    }

    其实这就是计数器思想,原理:通过一个变量记录住数据的状态变化,也需要通过循环完成。

两种最简单死循环格式

两种最简单的死循环格式分别为:

for(;;) {

}

while(true) {

}

死循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。

循环嵌套

这里重点讲解for循环嵌套。下面通过六个例子来练习forfor循环嵌套。
例一,使用for循环打印如下所示的图形:
****
****
****
对于打印长方形,外循环控制行数,内循环控制每一行的列数,也就是一行中元素的个数。代码如下:

class ForForDemo {
    public static void main(String[] args) {
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 4; y++) {
                System.out.print("*");
            }
            System.out.println(); 
        }
    }
}

例二,使用for循环打印如下所示的图形:
*****
****
***
**
*
发现图形有很多行,每一个行有很多列,所以得使用嵌套循环。原理:形象说法,大圈套小圈。代码如下:

class ForForDemo {
    public static void main(String[] args) {
        for (int x = 0; x < 5; x++) { 
            for (int y = x; y < 5; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

例三,使用for循环打印如下所示的图形:
*
**
***
****
*****
代码如下:

class ForForDemo {
    public static void main(String[] args) {
        for (int x = 0; x < 5; x++) {
            for (int y = 0; y <= x; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

总结:不是规律的规律:

  1. 尖朝上,可以改变条件,让条件随着外循环变化。
  2. 尖朝下,可以初始化值,让初始化值随着外循环变化。

例四,使用for循环打印如下所示的图形:
1
12
123
1234
12345
代码如下:

class ForForDemo {
    public static void main(String[] args) {
        for (int x = 0; x < 5; x++) {
            for (int y = 1; y <= x + 1; y++) {
                System.out.print(y);
            }
            System.out.println();
        }
    }
}

例五,打印一个99乘法表。
代码如下:

class ForForDemo {
    public static void main(String[] args) {
        for (int x = 1; x <= 9; x++) {
            for (int y = 1; y <= x; y++) {
                System.out.print(y + "*" + x + "=" + (y*x) + "\t");
            }
            System.out.println();
        }
    }
}

例六,打印如下所示的图形:
□□□□*
□□□*□*
□□*□*□*
□*□*□*□*
*□*□*□*□*
注意:表示空格。
代码如下:

class ForForDemo {
    public static void main(String[] args) {
        for (int x = 0; x < 5; x++) {
            for (int y = x + 1; y < 5; y++) {
                System.out.print(" ");
            }
            for (int z = 0; z <= x; z++) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

循环结构语句的其他二种格式

  • while:先判断条件,只有条件满足才执行循环体。
  • do while:先执行循环体,再判断条件,条件满足,再继续执行循环体。简单一句话:do while无论条件是否满足,循环体至少执行一次。

其他流程控制语句

break(跳出),应用于选择结构和循环结构。例如,

w:for (int x = 0; x < 3; x++) {
    for (int y = 0; y < 4; y++) {
        System.out.println("x = " + x); 
        break w;
    }
}

你可以给循环标号哟,然后通过break指定跳出哪个循环。
continue(继续),只能作用于循环结构,继续循环。特点:结束本次循环,继续下一次循环。 例如,

for (int x = 1; x <= 10; x++) {
    if(x % 2 == 1) 
        continue;
    System.out.println("x = " + x); 
}

你也可以给循环标号,然后通过continue指定继续哪个循环。

w:for (int x = 0; x < 3; x++) {
    for (int y = 0; y < 4; y++) {
        System.out.println("x = " + x); 
        continue w;
    }
}

这里,你需要注意两点:

  1. break和continue语句作用的范围。
  2. break和continue单独存在时,下面不可以有任何语句,因为都执行不到。

猜你喜欢

转载自blog.csdn.net/yerenyuan_pku/article/details/81545976