Java基础的运算符和程序流程控制

1. 运算符

计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:

  • 算术运算符
  • 赋值运算符
  • 关系运算符
  • 逻辑运算符
  • 三目运算符
  • 位运算符

1.1 算术运算符

算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。

算术运算符包括:+、-、*、/、%、++、--

举个例子: a=15    b=10

注意

++、--它们在变量的位置不同是有一定的区别的。

举个例子

①++在变量后面的例子:

1 public class Demo {
2     public static void main(String[] args) {
3         int a = 15;
4         //当++在后:表示:先运算、后自增
5         int b = a++;
6         System.out.println("b = " + b);
7         System.out.println("a = " + a);
8     }
9 }

结果为:

 ②++在变量前的例子:

1 public class Demo {
2     public static void main(String[] args) {
3         int a = 15;
4         //当++在后:表示:先运算、后自增
5         int b = ++a;
6         System.out.println("b = " + b);
7         System.out.println("a = " + a);
8     }
9 }

结果:

小结:

如果++或--在变量之前,可以理解成运算符很急,要先进行运算。

反之如果++或--在变量之后,可以理解成运算符不急可以后算。

 1.2 赋值运算符

Java中常见的赋值运算符包括:=、 +=、-=、/=、*=、%=

举个例子:

1.3 关系运算符

关系运算符得出的结果都是Boolean类型。Java常见的关系运算符包括:>、<、>=、<=、!=、==

举个例子:

表格中的变量  A = 10   B  = 20

 

1.4 逻辑运算符

逻辑运算符就是将多个关系运算符连接起来的运算符。得到的结果也是Boolean类型,Java常见的关系运算符包括:&&、||、!

举个例子:

表格中A = true    B = false

在判断逻辑运算符时会存在短路逻辑运算符。

短路逻辑运算符

 短路逻辑运算符的概念是当一个参与运算的操作数足以推断该表达式的值时,另一个操作数 (可能是表达式)就不会执行。

举个例子:

1 public class Demo {
2     public static void main(String[] args) {
3         int a = 10;
4         //由于与运算符只要有一个为假,结果就是为false
5         //所以当执行到  a<5 时,发现结果已经为false 便无需操作 ++a< 10
6         boolean b = (a < 5)&&(++a< 10);
7         System.out.println("a="+a);
8     }
9 }

结果为:

 1.5 三目运算符

三目运算符语法:

表达式?  值1 :  值2(当表达式为true时返回值1,当表达式为false时返回值2)

1 public class Demo {
2     public static void main(String[] args) {
3         int age = 20;
4         String str = age<18? "未成年": "成年";
5         System.out.println("str = " + str);
6     }
7 }

 结果:

后续将讲程序流程控制,而在此之前需要补充输入对象以及其方法。

输入对象

 Scanner输入对象,里面包含next()、nextDouble()、nextInt()、nextFloat()、nextByte()、nextBoolean()等方法。

next():用来输入字符串

nextDouble():用来输入double类型的浮点数

nextInt():用来输入int类型的整数

nextFloat():用来输入float类型的浮点数

nextByte():用来输入byte类型的整数

nextBoolean():用来输入boolean类型的数

 1 import java.util.Scanner;
 2 public class Test04 {
 3     public static void main(String[] args) {
 4         Scanner sc=new Scanner(System.in);//输入对象。
 5         System.out.println("请输入姓名:");
 6         String n=sc.next(); //在控制台输入的字符串 赋值给变量s
 7         System.out.println("请输入年龄:");
 8         int a=sc.nextInt();//在控制台输入整数  赋值给变量a
 9         System.out.println("你输入的内容:"+n);
10         System.out.println("你输入的年龄:"+a);
11     }
12 }

结果:

2. 程序流程控制

程序的流程控制一般分为三种:顺序执行、分支结构、循环结构

顺序执行:不加任何控制,程序会从main方法开始从上往下执行语句

分支结构:根据条件判断语句,有选择性地执行代码,在Java中提供if、switch两种格式

循环结构:重复执行某段代码。在Java中提供for、while、do......while三种格式

2.1 分支结构

 2.1.1 if分支

if分支是对条件语句进行判断,结果只可能是true或false,根据条件语句的结果不同,执行的代码语句也不相同。

2.1.2 if分支的格式

 1 第一种格式:
 2 if(条件语句){
 3     代码块;
 4 }
 5 
 6 第二种格式:
 7 if(条件语句){
 8    代码块;
 9 }else{
10    代码块;
11 }
12 
13 第三种格式:
14 if(条件语句){
15    代码块;
16 }else if(条件语句){
17    代码块; 
18 }else{
19    代码块;
20 }

①第一种分支格式

执行流程如下图:

if 第一种形式执行流程如下:
如果 条件表达式 为true,就执行下面的语句体
如果 条件表达式 为false,就不执行

举个例子:

 1 import java.util.Scanner;
 2 
 3 public class Demo {
 4     public static void main(String[] args) {
 5        //需求:当一个人的体温大于37℃时输出体温异常
 6         Scanner sc = new Scanner(System.in);
 7         System.out.println("请输入你的体温");
 8         int temperature = sc.nextInt();
 9         if(temperature > 37){
10             System.out.println("体温异常");
11         }
12     }
13 }

当输入的体温大于37℃时的结果(即条件为trrue的结果):

当输入的体温小于37℃时的结果(即条件为false的结果):

②第二种分支格式

 

if 第二种形式执行流程如下:
如果 条件表达式 为true,就执行下面的语句体1
如果 条件表达式 为false,就执行else下面的语句体2

举个例子:

 1 import java.util.Scanner;
 2 public class Demo {
 3     public static void main(String[] args) {
 4         // 需求:发红包,输入你钱包余额,现在要发出90元
 5         // 如果钱够触发发红包的动作,如果钱不够,则提示:余额不足。
 6         System.out.println("输入你的余额");
 7         Scanner sc = new Scanner(System.in);
 8         int money = sc.nextInt();
 9         if (money >= 90) {
10             System.out.println("发红包");
11         } else {
12             System.out.println("余额不足");
13         }
14     }
15 }

结果:

当输入的余额大于90时,会触发发红包的语句。

当输入的余额小于90时,会触发余额不足的语句。

 ③第三种格式

if 第三种形式执行流程如下:
如果 条件表达式1 为true,就执行下面的代码1;
如果 条件表达式1 为false,就继续判断条件表达式2;

如果 条件表达式2 为true,就执行下面的语句体;
如果 条件表达式2 为false,就继续判断条件语句体3;

如果 条件表达式3 为true,就执行下面的语句体3
如果 条件表达式3 为false,就继续判断后面的表达式;

....
如果前面所有条件表达式判断都为false,就执行最后的else语句中的代码

举个例子:

 1 import java.util.Scanner;
 2 public class Demo {
 3     public static void main(String[] args) {
 4         //输入自己的考试成绩,显示所获奖励
 5         /*成绩==100分,爸爸给我买辆车
 6          成绩>=90分,妈妈给我买MP4
 7          90分>成绩>=60分,妈妈给我买本参考书
 8         成绩<60分,什么都不买*/
 9         Scanner sc = new Scanner(System.in);
10         int score = sc.nextInt();
11         if (score == 100) {
12             System.out.println("爸爸给我买辆车");
13         } else if (score >= 90) {
14             System.out.println("妈妈给我买MP4");
15         } else if (score >= 60) {
16             System.out.println("妈妈给我买本参考书");
17         } else {
18             System.out.println("什么都不买");
19         }
20     }
21 }

2.1.2 switch分支

 switch分支的作用是,通过比较值来执行决定执行哪个语句

switch执行流程:

①先执行表达式的值,再通过表达式的值与case后的值进行匹配

②与哪个case匹配时为true就执行哪个case代码,知道遇见break跳出switch分支

③如果全部case的值与之匹配都是false,则执行default块的代码。

switch分支循环语句:

switch (表达式){
   case "值1":
      执行代码;
      break;
   case "值2":
      执行代码;
      break;
   case "值3":
      执行代码;
      break;
   default:
      执行代码;
}

举个例子:

/*
需求:输入数字返回对应的星期
    1:星期一              
    2:星期二             
    3:星期三      
    4:星期四
    5:星期五
    6:星期六
    7:星期天
*/
 1 public class Test04 {
 2     public static void main(String[] args) {
 3         int num = 1;
 4         switch (mun){
 5             case 1:
 6                 System.out.println("星期一");
 7                 break;
 8             case 2":
 9                 System.out.println("星期二");
10                 break;
11             case 3:
12                 System.out.println("星期三");
13                 break;
14             case 4:
15                 System.out.println("星期四");
16                 break;
17             case 5:
18                 System.out.println("星期五");
19                 break;
20             case 6:
21                 System.out.println("星期六");
22                 break;
23             case 7":
24                 System.out.println("星期日");
25                 break;
26             default:
27                 System.out.println("输入的数字不对");
28         }
29     }
30 }

switch分支中容易出错的地方:

①switch中表达式是只能是byte、short、int、char类型,再jdk5后支持字符串类型(String)。

②case给出的值不允许重复,且不能是变量

③正常使用switch时,case后面不要忘记break,如果没有break语句switch会具有穿透性

这里详细讲讲switch中的穿透性:

switch穿透性:

 当switch语句执行匹配到case语句后,进入case语句发现后续没有break语句,程序会直接进入下一个case语句中,直到遇见break语句结束,或者执行完default语句也会结束。

这种语法设计也是有它的用处的,当多个case语句想要执行同一段代码时,可以利用case穿透现象,提高代码复用性。

比如:在程序中,我们想让周周二、周三、周四,都请大牛程序员来写代码。

小结

在开发中if语句常用于范围进行判断的场景,而switch语句常用于一个值与一个值进行匹配的场景。

2.2 循环结构

循环语句用于重复执行某一段代码语句。

为什么需要循环结构?

当程序需要重复执行多次某段代码语句时,如果不运用循环结构的方法就会显得十分繁琐,并且对于管理这些代码语句也是十分不方便的,所以这时就需要使用循环结构一方面可以简化操作并且可以提高代码的复用性,提高开发效率。

Java中提供三种循环结构:for循环、while循环、do......while循环

 2.2.1 for循环

循环四要素:

①初始化部分

②循环条件部分

③循环体部分

④迭代部分

for循环语句的一般形式:

for(初始化部分;循环条件部分;迭代部分){
循环体部分
}

执行的过程为:①--->②--->③--->④--->②--->③--->④---.......---->②

练习:

使用for循环打印出:
1 2 3 4 5 6 7 8 9 10

代码:

public class Test{
    public static void main(String[] args){
         for(int i = 1; i<=10;i++){
               System.out.print(i+"\t");
         }
    }
}

2.2.2 while循环

循环四要素:

①初始化部分

②循环条件部分

③循环体部分

④迭代部分

while循环语句的一般形式:

初始化部分
while
(循环条件部分){ 循环体部分 迭代部分 }

执行过程:① ----> ② ---> ③ ---> ④ ---> ② ---> ③ ---> ④ ---> .....---> ②

练习:

使用while循环打印出
1    2    3    4    5    6    7    8    9    10

代码:

public class Test{
    public static void main(String[] args){
         int i = 1;
         while(i <= 10){
              System.out.print(i+"\t");
              i++;
         }
    }
}

2.2.3 do......while循环

循环四要素:

①初始化部分

②循环条件部分

③循环体部分

④迭代部分

do......while循环语句一般形式:

初始化部分
do{
循环体部分
迭代部分
}while(循环条件部分); 

执行顺序:① ---> ③ ---> ④ ---> ② ---> ③ ---> ④ ---->...---> ②

练习:

使用do......while循环打印出
1    2    3    4    5    6    7    8    9    10

代码:

public class Test06 {
    public static void main(String[] args) {
        int i = 1;
        do {
            System.out.print(i+"\t");
            i++;
        }while(i<=10);
    }
}

循环教大家一招:

对于循环中迭代语句不知道是要自增还是自减?

先说结论当判断条件为>时,则递减。判断条件为<时,则递增

我们可以思考一下:

判断语句比如 a>0时,结果为true,你不断循环变量不断迭代,只有当你的变量递减有可能不满足条件,从而跳出循环吧,否则死循环就没意义了。

小结:

三种循环的区别:

①执行的次数不同:对于do....while循环语句至少要执行一次,而for循环与while循环可以一次都不执行。

②初始化的语句不同:do...while循环与while循环它们初始化是在循环语句之前,而for循环是在循环语句中的。

③循环的次数不同:对于for循环来讲循环的次数是明确的,而while循环,do....while循环循环的次数是不明确的。

④判断与执行的先后顺序不同:对于for循环与while循环是先判断后执行的,而do.....while语句是先执行后判断的。

 

posted @ 2023-10-21 21:18  和哗  阅读(75)  评论(0编辑  收藏  举报