Java之四 表达式和流程控制

简介: Java之四 表达式和流程控制

视频课堂:https://edu.csdn.net/course/play/8222

   运算符和表达式的概念

   运算符总结

   运算符和表达式的示例

 布尔运算

 

 

运算符和表达式的概念

运算符表示对操作数所进行的运算。


按操作数的数目来分,可分为如下3类:


一元运算符 (如 ++,--)


二元运算符 (如 +,-,*,/)


三元运算符 (如 ?:)


按照运算符功能来分,基本的运算符主要分为下面几类:


算术运算符 (+,-,*,/,%,++,--)


关系运算符 (>,<,>=,<=,==,!=)


布尔逻辑运算符 (!,&&,||)


位运算符 (>>,<<,>>>,&,|,^,~)


赋值运算符 (=,及其扩展赋运算符如+=)


条件运算符 (?:)


其他 (包括分量运算符、下标运算符[]、实例运算符instanceof、内存分配运算符new、强制类型转换运算符(类型)、方法调用运算符()等)


表达式是变量、常量、运算符和方法调用的序列,它执行指定的计算并返回某个确定的值。表达式的值是属于某个类型的,表达式的类型由运算及参与运算的操作数的类型决定,也可以是复合类型。

运算符总结

下面分别介绍常用的基本运算符,通过这些基本的运算符可以表达复杂的逻辑。

一.算术运算符

算术运算符作用于整型或浮点型数据,完成算术运算。

Java 语言有5种基本的算术运算符,如表1所示。

运  算  符

含    义

例    子

+

3 + 4

-

5 - 7

*

5 * 5

/

14 + 7

%

20 % 7

表1 Java算术运算符

 

  Java的算术表达式及其等价式如表2所示。

表  达  式

等  价  式

x += y

x = x + y

x -= y

x = x - y

x *= y

x = x * y

x /= y

x = x / y

x %= y

x = x % y

x++

x = x + 1

x--

x = x - 1

表2 Java算术表达式与等价式

二.关系运算符

关系运算符用来比较两个值,返回布尔类型的值true或false,关系运算符都是二元运算符,如表3所示。

运  算  符

含    义

举   例

==

等于

x == 3

!=

不等于

x != 3

小于

x < 3

大于

x > 3

<=

小于等于

x <= 3

>=

大于等于

x >= 3

表3 Java关系运算符及举例


在Java语言中,任何数据类型的数据(包括基本类型和组合类型)都可以通过==或!=来比较是否相等(这与C、C++不同)。关系运算的结果返回true或false,而不是C、C++中的1或0。关系运算符常与布尔逻辑运算符一起使用,作为流控制语句的判断条件,例如:


if( (a>b)&& (b==c) )


三.布尔逻辑运算符


布尔逻辑运算符进行布尔逻辑运算,主要有如表4所示的运算符。

运  算  符

含    义

!

逻辑非

&&

逻辑与

||

逻辑或

表4 Java布尔逻辑运算符

四.位运算符

位运算符用来对二进制位进行操作,Java中提供了如表5所示的位运算符。

运  算  符

含    义

&

按位与

|

按位或

^

按位异或

~

按位取反

<< 

按位左移

>> 

按位右移

>>> 

无符号右移

表5 Java位运算符


注意:


(1)在位运算符中,除“~”以外,其余均为二元运算符。


(2)在位运算中操作数只能为整型和字符型数据。


(3)“~”运算符与“-”运算符不同,如~100≠-100。


(4)Java使用补码表示二进制数。


(5)无符号右移时在最高位添零。


 

运算符和表达式的示例

 

运用Java算术运算符的简单例子

程序源码1:

 

public class ArithmeticTest{
public ArithmeticTest(){ }
public static void main(String[] args){
short x=6;
int y=4;
float a=12.5f;
float b=7f;
      System.out.println("x is " +x + " , y is " + y);
      System.out.println("x + y =" + (x+y));
      System.out.println("x - y =" + (x-y));
      System.out.println("x / y =" + (x/y));
      System.out.println("x % y =" + (x%y));
      System.out.println("a is"+a+" , b is "+b);
      System.out.println("a / b = " +(a/b));
   }
}
编译并运行程序,其输出结果为:
x is 6 , y is 4
x + y = 10
x - y = 2
x / y = 1
x % y = 2
a is 12.5 , b is 7.0
a / b = 1.7857143

注意:


(1)Java对加运算符进行了扩展,使它能够进行字符串的连接,例如"abc"+"de",得到串"abcde"。


(2)与C、C++不同,对取模运算%来说,其操作数可以为浮点数,如37.2%10=7.2。


(3)i++与++i的区别为,i++在使用i之后,使i的值加1,因此执行完i++后,整个表达式的值为i,而i的值变为i+1。++i在使用i之前,使i的值加1,因此执行完++i后,整个表达式和i的值均为i+1。对i--与--i同样。


程序源码2:

 

public class ArithmFixTest{
   public ArithmFixTest(){
   }
   public static void main(String[] args){
      int x=0;
      int y=0;
      System.out.println("The test is asfollowing:");
      System.out.println("x="+x);
      System.out.println("y="+y);
      x++;
      System.out.println("x++="+x);
      ++x;
      System.out.println("++x="+x);
      System.out.println();
      System.out.println("set x=0:");
      x=0;
      System.out.println("-------");
      y=x++;
      System.out.println("y=x++ :");
      System.out.println("x is "+x);
      System.out.println("y is "+y);
      System.out.println("-------");
      y=++x;
      System.out.println("y=++x :");
      System.out.println("x is "+x);
      System.out.println("y is "+y);
      System.out.println("-------");
      System.out.println();
      System.out.println("Another test is asfollowing:");
      x=-7;
      y=5;
      System.out.println("-7/5="+x/y);
      x=-7;
      y=5;
      System.out.println("-7%5="+x%y);
      x=7;
      y=-5;
      System.out.println("7%-5="+x%y);
      double a=5.5;
      double b=1.0;
      System.out.println("5.5 % 1.0="+a%b);
   }
}
编译并运行程序,其输出结果为:
The test is as following:
x=0
y=0
x++=1
++x=2
set x=0:
-------
y=x++ :
x is 1
y is 0
-------
y=++x :
x is 2
y is 2
-------
Another test is as following:
-7/5=-1
-7%5=-2
7%-5=2
5.5 % 1.0=0.5

布尔运算

运用Java布尔逻辑运算符的一个简单例子

程序源码:

 

public class ArithmBool{
  public ArithmBool(){
  }
  public static void main(String[] args){
    int iVara=20;
    int iVarb=3;
    System.out.println("The foolowing is the test:");
    boolean bVard=(iVara<iVarb);
    System.out.println("iVara < iVarb = " + bVard);
    int iVare=3;
    if((iVare!=0) && ((iVara/iVare)>5))
      System.out.println("iVara / iVare = "+ (iVara/iVare));
    int iVarf=0;
    if( (iVarf!=0) && ( (iVara/iVarf) > 5 ) )
      System.out.println("iVara / f = " + (iVara/ iVarf));
    else
      System.out.println("f = " + iVarf);
  }
}
编译并运行程序,其输出结果为:
The foolowing is the test:
iVara < iVarb = false
iVara / iVare = 6
f = 0

 

条件语句if…else

 

if…else语句根据判定条件的真假来执行两种操作中的一种,其一般的格式为:


   if( boolean-expression ){

       statement1;

   }else{

       statement2;

   }

   statement3;


说明:


布尔表达式boolean-expression是任意一个返回布尔型数据的表达式。

每个单一的语句后都必须有分号。

语句statement1、statement2可以为复合语句,这时要用大括号{}括起。建议对单一的语句也用大括号括起,这样程序的可读性强,而且有利于程序的扩充(可以在其中添加新的语句)。

else子名是任选的,但建议都加上(即使里面为空)。

若布尔表达式的值为true,则程序执行statement1,否则执行statement2。执行完之后执行statement3。

if…else语句的一种特殊形式为:

if(expression1 ){

  statement1;

}else if( expression2 ){

  statement2;

}……

else if( expressionM ){

  statementM;

}else{

  statemetN;

}


else子句不能单独作为语句使用,它必须和if配对使用。else总是与离它最近的if配对。可以通过使用大括号{}来改变配对关系。



例1、比较两个数的大小,并输出较大数。



程序源码:

public class ConditionIf{
  public ConditionIf(){
  }
public static void main(String[] args){
    int iVara=10;
    int iVarb=100;
    if(iVara > iVarb){
      System.out.println("The larger is " +iVara);
    }else{
      System.out.println("The larger is" + iVarb);
    }
    System.out.println("The test is end!");
  }
}
编译并运行程序,其输出结果为:
Thelarger is 100
The test is end!

例2、判断某一年是否为闰年,并输出判断结果。


程序源码:

//判断某一年是否为闰年
public class ConditionElse{
  public ConditionElse(){
  }
  public static void main(String[] args){
    int year=2008;
    boolean leap=false;
    if((year % 4) != 0){
      leap=false;
    }else if((year % 100) != 0){
      leap=true;
    }else if((year % 400) !=0){
      leap=false;
    }else{
      leap=true;
    }
    if(leap == true){
      System.out.println(year + "是闰年.");
    }else{
      System.out.println(year + "不是闰年.");
    }
    year=2010;
    if((year % 4) ==0 ){
      if((year % 100) != 0){
        leap=true;
      }else{
        leap=false;
      }
    }else if((year % 400) ==0){
      leap=true;
    }else{
      leap=false;
    }
    if(leap == true){
      System.out.println(year + "是闰年.");
    }else{
      System.out.println(year + "不是闰年.");
    }
  }
}

编译并运行程序,其输出结果为:


2008是闰年.

2010不是闰年

 

循环语句的使用

 

 

循环语句的作用是反复执行一段代码,直到满足循环终止条件时为止,一个循环一般应包括4部分内容。


·        初始化部分:用来设置循环的一些初始条件,如计数器清零等。


·        循环体部分:这是反复循环的一段代码,可以是单一的一条语句,也可以是复合语句。


·        迭代部分:这是在当前循环结束、下一次循环开始执行的语句,常常用来使计数器加1或减1。


·        终止部分:通常是一个布尔表达式,每一次循环要对该表达式求值,以验证是否满足循环终止条件。


Java中提供的循环语句有:while语句;do…while语句和for语句。


下面分别说明这3种语句的结构。


q     While语句


q     Do…while语句


q     for 语句


q     continue 语句


 

while 语句

while语句实现“当型”循环,它的一般格式为:


[initialization]

   while(termination){

      body;

      [iteration;]

   }


当布尔表达式(termination)的值为true时,循环执行大括号中的语句。初始化部分和迭代部分是可选的。


while语句首先计算终止条件,当不满足终止条件时,才去执行循环中的语句,这是“当型”循环的特点。例如:



char ch = 'a';

   while( (ch != ' ') && (ch != '\t') && (ch !='\n') && (ch != '\r') ){

      System.out.println(ch);

      ch = instream.read();   // 从一个外部输入流中读字符数据

   }

 

do…while 语句

do…while语句实现“直到型”循环,它的一般格式为:


[initialization]

   do{

       body;

       [iteration;]

   }while(termination);


do…while语句首先执行循环体,然后计算终止条件,若不满足终止条件,则继续循环执行大括号中的语句,直到终止条件满足。


与while语句不同的是,do…while语句的循环体至少执行一次,是“直到型”循环的特点。


for 语句

for语句也用来实现“当型”循环,它的一般格式为:

for(initialization; termination;iteration){

      body;

   }


for语句的执行顺序是:首先执行“initalization”初始化语句,然后测试“termination”条件语句;若条件成立,则执行循环体,然后执行“iteration”控制语句,接着再测试条件语句是否成立,如果成立则重复执行以上过程,直至条件不成立时才结束for循环。


例如:



int a[] = newint[10];

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

      a[i]=0;

   }


这段代码把整型数组a中的所有元素都赋成0。


可以在for循环的头部说明变量,而且最后一个表达式可以省略,不过要确定在语句中对变量的值有所改变,例如:


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

       i+=1;

   }


在for循环中,初始化语句、条件语句和控制语句都可以省略,但是其间的分号不能省略,例如:


int n=0;

   for( ; ; ){

      if(i>100){

         break;

      }else{

         i++;

      }

   }


   注意:


for循环中省略条件语句时,在for语句循环体中必须包含转换语句,控制程序在某个条件满足时跳出for循环,否则将形成死循环。

continue 语句


continue语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,在进行终止条件判断前,还要先执行迭代语句。


contine语句的格式为:continue;

也可以用continue语句跳转到括号指明的外层循环中,这时的格式为:continue Lable;


例如:


  outLable: for( int i=0; i<10; i++){      // 外层循环


                for(int j=0; i<20; j++){   // 内层循环


                    if(j>i){


                      ……


                      continueoutLable;


                    }


                    ……


                 }


                  ……


             }  


在这个例子中,当满足(j>i)的条件时,程序执行完相应的语句后跳转外层循环,执行外层循环的迭代语句i++,然后开始下一次循环。

举例

下例分别用while、do…while和for语句实现1~100的累计求和。

 

 

public class LoopShow{
  public LoopShow(){
  }
  public static void main(String[] args){
    int iTotal=0;
    int n=1;
    while(n<=100){
      iTotal=iTotal+n;
      n++;
    }
    System.out.println("Account using while,the total ="+iTotal);
    iTotal=0;
    n=1;
    do{
      iTotal=iTotal+n;
      n++;
    }while(n<=100);
    System.out.println("Account using do...while,the total= "+iTotal);
    iTotal=0;
    for(n=1;n<=100;n++){
      iTotal=iTotal+n;
    }
    System.out.println("Account using for,the total ="+iTotal);
  }
}

编译并运行程序,其输出结果为:

Account using while,the total = 5050

Account using do...while,the total = 5050

Account using for,the total = 5050

 

 

实践问题:

1. 想想你在计算某些价格是用到了表达式去计算了吗?

2. 如果用程序实现某些方程式,可以吗?尝试看是否能计算出方程式的解。

v

 

 

小结:

 

在本章中,我们主要学习了:

 

u      表达式的概念和应用

u      流程控制语句的使用,注意和c#的语句做对比;

 

 

 

英语词汇:

 

英文                   全文                          中文

While          While            当…

For        For          循环

Continue        Continue               继续

 

 

练习项目:

 

如果你是一个商店的售货员,你每天卖出的商品需要计算;能不能使用面向对象的思想写个程序来计算,你卖出的每件商品的计算和总销售额及利润的计算;

目录
相关文章
|
2月前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
65 12
|
1月前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
2月前
|
Java API 开发者
Java中的Lambda表达式:简洁代码的利器####
本文探讨了Java中Lambda表达式的概念、用途及其在简化代码和提高开发效率方面的显著作用。通过具体实例,展示了Lambda表达式如何在Java 8及更高版本中替代传统的匿名内部类,使代码更加简洁易读。文章还简要介绍了Lambda表达式的语法和常见用法,帮助开发者更好地理解和应用这一强大的工具。 ####
|
2月前
|
并行计算 Java 编译器
深入理解Java中的Lambda表达式
在Java 8中引入的Lambda表达式,不仅简化了代码编写,还提升了代码可读性。本文将带你探索Lambda表达式背后的逻辑与原理,通过实例展示如何高效利用这一特性优化你的程序。
|
2月前
|
搜索推荐 Java API
探索Java中的Lambda表达式
本文将深入探讨Java 8引入的Lambda表达式,这一特性极大地简化了代码编写,提高了程序的可读性。通过实例分析,我们将了解Lambda表达式的基本概念、使用场景以及如何优雅地重构传统代码。文章不仅适合初学者,也能帮助有经验的开发者加深对Lambda表达式的理解。
|
2月前
|
Java
探索Java中的Lambda表达式
【10月更文挑战第37天】本文将带你深入理解Java的Lambda表达式,从基础语法到高级特性,通过实例讲解其在函数式编程中的应用。我们还将探讨Lambda表达式如何简化代码、提高开发效率,并讨论其在实际项目中的应用。
|
2月前
|
Java API
Java中的Lambda表达式与函数式编程####
【10月更文挑战第29天】 本文将深入探讨Java中Lambda表达式的实现及其在函数式编程中的应用。通过对比传统方法,我们将揭示Lambda如何简化代码、提高可读性和维护性。文章还将展示一些实际案例,帮助读者更好地理解和应用Lambda表达式。 ####
|
2月前
|
JSON 自然语言处理 Java
这款轻量级 Java 表达式引擎,真不错!
AviatorScript 是一个高性能、轻量级的脚本语言,基于 JVM(包括 Android 平台)。它支持数字、字符串、正则表达式、布尔值等基本类型,以及所有 Java 运算符。主要特性包括函数式编程、大整数和高精度运算、完整的脚本语法、丰富的内置函数和自定义函数支持。适用于规则判断、公式计算、动态脚本控制等场景。
|
2月前
|
Java API 开发者
Java中的Lambda表达式与函数式编程####
在Java的演变过程中,Lambda表达式和函数式编程的引入无疑是一次重大的飞跃。本文将深入探讨Lambda表达式的定义、用法及优势,并结合实例说明如何在Java中利用Lambda表达式进行函数式编程。通过对比传统编程方式,揭示Lambda表达式如何简化代码、提高开发效率和可维护性。 ####
|
1月前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。