Java运算符与表达式(二)

来自CloudWiki
跳转至: 导航搜索

比较运算符

  • 关系运算符,又称比较运算符,用于比较两个操作数的大小,运算结果是boolean型。
  • 当运算符对应的关系成立时,运算结果是true。
  • 当运算符对应的关系不成立时,运算结果是false。

Auto4-7.png

10 > 9                   //运算结果是true
10 < 9                   //运算结果是false
10 >= 9                 //运算结果是true
10 <= 9                 //运算结果是false
10 == 9                 //运算结果是false
10 != 9                  //运算结果是true
  • 关系运算符的>、>=、<、<=两边的操作数只能是数值类型。
  • 关系运算符的==、!=两个的操作数可以是数值类型,也可以是引用类型(暂时不考虑)

商院面馆:产品调查

public class Operator {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        float price,weight;int num;
        boolean isEnough;
        
        price = 10f;num =5;weight = 0.5f;
                
        System.out.println("价格是否平价?"+(price <=15));
        System.out.println("重量是否大于0.3kg?"+(weight>=0.3));
        isEnough = num<5;
        System.out.println("是否外送?"+isTakeOut);
        
	}

}


练习:假设int a = 10;int b = 20;

打印a == b、a != b、a > b、a < b、b >= a、b <= a的值

练习:假设你的商品价格等于110,折扣为7.5折,包邮:

1. 价格是否大于于100;
2. 折扣是否小于等于0.8(80%)
3. 商品是否包邮

请设计变量、编写表达式将这几个因素打印出来。

逻辑运算符

Java语言使用&& 、||、! 对条件进行逻辑运算或组着。

  • ! 表示单个条件的“否”关系,如图3
  • && 表示多个条件之间的“与”关系,如图2
  • ||表示多个条件之间的“或”关系,如图1
  • P4-1.png
  • 逻辑运算符用于操作两个布尔型的变量或常量。逻辑运算符包括:

!:逻辑非运算符

  • !:逻辑非运算符,只需要一个操作数,如果操作数为true,则返回false;如果操作数为false,则返回true。例如:
System.out.println(2 > 8)                                   //运算结果为true
System.out.println(!(2 > 8))                                   //运算结果为true

&&:逻辑与运算符

  • &&:逻辑与运算符,前后两个操作数必须都是true才返回true,否则返回false。例如,2>8&&9>2的结果为false。
int a = 2;
int b = 8;
System.out.println(a < b && b> 2);
//输出表达式的运算结果为true
System.out.println(a > b && b> 2);
//输出表达式的运算结果为false;
  • 逻辑与运算符具备短路效果,即当前面的操作数(a>b)为false,后面的操作数对应的表达式不再执行,直接返回false。

||:逻辑或运算符

  • ||:逻辑或运算符,只要两个操作数中有一个是true,就可以返回true,否则返回false。
int a = 2;
int b = 8;
//输出表达式的运算结果为true
System.out.println(a < b || b> 2);
//a的值为2,b的值为8
System.out.println(a < b || b< 2);
//此时,输出表达式的运算结果仍然为true
  • 逻辑或运算符具备短路效果,即当前面的操作数(a>b)为true,后面的操作数对应的表达式不在执行,直接返回true。


案例: 商院面馆 的商品

  • 是否同时满足价格低于15且数量小于5?
  • 是否满足价格低于15或数量小于5 ?
  • 是否为外送?

代码:

public class Operator {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        float price; int num;
        boolean isTakeOut=true;
        
        price = 10f;num =5;
        
        System.out.println("是否同时满足数量小于5且价格低于15? "+(num<5&&price<15));
        System.out.println("是否满足数量小于5或价格低于15 ?"+(num<5||price<15));
        System.out.println("是否为外送?"+isTakeOut);
        System.out.println("是否为堂吃?"+!isTakeOut);        
        
	}

}

练习;

逻辑运算符:假设boolean a = true; boolean b = false;

打印a && b、a || b 、!(a && b) 的值。

练习:假设你的商品价格等于110,折扣为7.5折,剩余数量为50,包邮:

1. 该商品是否满足价格低于150 且折扣小于0.8;
2. 该商品是否满足剩余数量大于40或折扣小于0.9
3. 该商品是否需支付运费 ?

位运算符(选学)

  • *任何信息在计算机中都是以二进制的形式存在的,位运算符对操作数中的每个二进制位都进行运算。位运算符包括:
  • &:按位与。当两位同时为1时才返回1。
  • |:按位或。只要有一位为1即可返回1。
  • ~:按位非。单目运算符,将操作数的每一位(包括符号位)全部取反。
  • ^:按位异或。当两位相同时返回0,不同时返回1.
  • >>:右移运算符。例如,11>>2; // 则是将数字11右移2位。
  • <<:左移运算符。例如,5 <<2; //则是将数字5左移2位。
  • >>>:无符号右移运算符。
  • 原理:
A = 0011 1100
B = 0000 1101
-----------------
A&b = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011
  • 拓展:一个整数的二进制表达
 int i = 5;
 String b = (Integer.toBinaryString(i));

括号运算符

  • 圆括号“()”也是Java的运算符,圆括号是用来处理表达式优先级的。
  • 例如,一个简单的加减乘除表达式为例:
3+5+4*6-7  //未加括号的表达式
  • 相信根据读者现在所学过的数学知识,这道题应该很容易解开。利用加减乘除的优先级(*、/的优先级大于+、-)来计算,这个表达式的结果为25。如果想先计算3+5+4、6-7,然后再将计算后的两个数相乘,就必须将3+5+4及6-7分别加上括号,成为下面的表达式:
(3+5+4)*(6-7) // 加上括号的表达式。
  • 此时,具备圆括号的表达式运算结果为-12,所以圆括号可以改变表达式的处理顺序。

题目:假设int a = 10;int b = 20;int c=30

打印 a+ b*c 与 (a+b)*c 的值,体会括号的作用。

练习:打印!(a && b) 与!a && b的值,体会括号的作用。

三目运算符

  • 三目运算符只有一个:?:,三目运算符的语法格式如下:
  • 逻辑表达式?表达式1:表达式2
  • 三目运算符的规则是:先对第一个操作数逻辑表达式求值,如果逻辑表达式返回true,则返回第二个操作数表达式1的值;如果逻辑表达式返回false,则返回第三个操作数表达式2的值。例如:
String str = 5 > 3 ? "5大于3" : "5不大于3";
 System.out.println(str);    //输出“5大于3”

同样的普通if语句,如果用三目运算符来做,更简单:

int value = 113;
 if(value >100){
   System.out.println("空气质量不好!");
 }else{
   System.out.println("空气质量很好!");
 }

可以写为:

int value = 113;
 String str = value>100 ?"空气质量不好!" :"空气质量很好!";
 System.out.println(str);

面馆例题:


package demo1;
import java.util.Scanner;
public class happy08 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//int a = 10 ;int b = 20;
		//System.out.println(a==b);
		Scanner sc = new Scanner(System.in);
		System.out.println("客官,您是堂吃还是外卖?1.堂吃; 2.外卖");
		String s = sc.next();
		String s2 = (s.equals("1")) ? "堂吃一位" : "外送一位";
		System.out.println(s2);

	}

}

案例: 练习:假设你的商品价格等于110,折扣为7.5折,剩余数量为50,包邮:

1. 判断该商品价格是否小于一百五,如果是,打印“该商品为平价商品”;
2. 判断该商品价格是否打折,如果是,打印“该商品打折促销中”;
3. 判断该商品包邮,如果是,打印“该商品包邮哦,亲~”;

Java练习题

  • 赋值运算符:假设int a = 10; int b = 20; int c = 30;

打印 c = a + b、c += a、c += a、c += a、c += a的值。

  • 算术运算符:假设int a = 10; int b = 20; int c = 25; int d = 25;

打印a+b、a-b、a*b、b/a、b%a、c%a、a++、a--、d++、++d

  • 计算n的阶乘(n=3,4,5,6,7)
  • 这段代码运行后,i等于多少?j等于多少?k等于多少?
int i = 0;   
int j = i++;   
int k = --i;
  • 关系运算符:假设int a = 10;int b = 20;

打印a == b、a != b、a > b、a < b、b >= a、b <= a的值

  • 逻辑运算符:假设boolean a = true; boolean b = false;

打印a && b、a || b 、!(a && b) 的值。

  • 快速计算2*16

返回 Java程序设计