JAVA的运算符及优先级、Scanner、Random、选择控制语句

运算符

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

  • 算术运算符
  • 比较运算符
  • 赋值运算符
  • 条件运算符
  • 逻辑运算符
  • 位运算符

算术运算符

算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。
在这里插入图片描述
下面是我们的代码

public class Test {
 
  public static void main(String[] args) {
     int a = 2;
     int b = 20;
	  
     System.out.println("a + b = " + (a + b) );
     System.out.println("a - b = " + (a - b) );
     System.out.println("a * b = " + (a * b) );
     System.out.println("b / a = " + (b / a) );
     System.out.println("b % a = " + (b % a) );
     System.out.println("b % a = " + (b % a) );
     // 在我们算术运算符中需要特殊注意 ++ 和 --
     System.out.println("a++   = " +  (a++) );
     System.out.println("a--   = " +  (a--) );
     System.out.println("++a   = " +  (++a) );
     System.out.println("--a   = " +  (--a) );
  }
}

这个是我们的运行后的结:
在这里插入图片描述
在这里说一下我们的自增自减在运算过程中,当++和–在前面的时候,例如++a/–a那么就先把原来的值进行自增或自减1,随后再去进行运算;如果++和–在后面时,例如a++/a–就先拿我们的a去做运算,在进行自增或自减1。
我们总结了一个句子:“当++/–在前,先加减,在自用;如果++/–在后,先自用,在加减”。

比较运算符

下图的变量A =2,变量B = 20的条件下进行的比较。
在这里插入图片描述
代码如下:

public class Test {
 
  public static void main(String[] args) {
     int a = 2;
     int b = 20;
     System.out.println("a == b = " + (a == b) );
     System.out.println("a != b = " + (a != b) );
     System.out.println("a > b = " + (a > b) );
     System.out.println("a < b = " + (a < b) );
     System.out.println("b >= a = " + (b >= a) );
     System.out.println("b <= a = " + (b <= a) );
  }
}

运行结果如下:
在这里插入图片描述

赋值运算符

赋值运算如下表:
在这里插入图片描述
代码如下:

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 0;
        c = a + b;
        System.out.println("c = a + b = " + c );
        c += a ;
        System.out.println("c += a  = " + c );
        c -= a ;
        System.out.println("c -= a = " + c );
        c *= a ;
        System.out.println("c *= a = " + c );
        a = 10;
        c = 15;
        c /= a ;
        System.out.println("c /= a = " + c );
        a = 10;
        c = 15;
        c %= a ;
        System.out.println("c %= a  = " + c );
        c <<= 2 ;
        System.out.println("c <<= 2 = " + c );
        c >>= 2 ;
        System.out.println("c >>= 2 = " + c );
        c >>= 2 ;
        System.out.println("c >>= 2 = " + c );
        c &= a ;
        System.out.println("c &= a  = " + c );
        c ^= a ;
        System.out.println("c ^= a   = " + c );
        c |= a ;
        System.out.println("c |= a   = " + c );
    }
}

运行结果如下:
在这里插入图片描述

条件运算符

条件运算符也被称为三元运算符或三目运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
格式为:数据类型 名字 = 变量1 比较运算符 变量2 ? 变量1 : 变量2;

public class Test{
	public static void main(String[] args){ 
		int a=5;
		int b=7;
		int c=6;
		
		int max = a > b ? a : b;
		System.out.println("max = " + max);
		
		String str = a == b? "相等" : "不相等";
		System.out.println("str为:" + str);
	}
}

运行结果如下:
在这里插入图片描述

逻辑运算符

下表列出了逻辑运算符中要注意也是经常用到的运算符,假设布尔变量A为真,变量B为假
在这里插入图片描述
这里在详细说一下逻辑运算符:

  • & 两边的操作数 都是true才是true,一个为false,结果就为false
  • | 两边的操作数 一个为true就是true,两个都为false才是false
  • ! 取反
  • ^ 相同为false,不同为true
  1. 短路:如果第一个操作数已经能够决定最终的结果,第二个操作数不再执行
  • && 两边的操作数 都是true才是true,一个为false,结果就为false
  • || 两边的操作数 一个为true就是true,两个都为false才是false
  • 推荐使用&& 或者 ||,提议提高效率
public class Test {
  public static void main(String[] args) {
     boolean a = true;
     boolean b = false;
     System.out.println("a && b = " + (a&&b));
     System.out.println("a || b = " + (a||b) );
     System.out.println("!(a && b) = " + !(a && b));
  }
}

运行结果如下:
在这里插入图片描述

位运算符

位运算的详细信息如下表:
在这里插入图片描述
代码如下:

public class Test {
  public static void main(String[] args) {
     int a = 60; /* 60 = 0011 1100 这注释里面的是转成的二进制*/ 
     int b = 13; /* 13 = 0000 1101 */
     int c = 0;
     c = a & b;       /* 12 = 0000 1100 */
     System.out.println("a & b = " + c );
 
     c = a | b;       /* 61 = 0011 1101 */
     System.out.println("a | b = " + c );
 
     c = a ^ b;       /* 49 = 0011 0001 */
     System.out.println("a ^ b = " + c );
 
     c = ~a;          /*-61 = 1100 0011 */
     System.out.println("~a = " + c );
 
     c = a << 2;     /* 240 = 1111 0000 */
     System.out.println("a << 2 = " + c );
 
     c = a >> 2;     /* 15 = 1111 */
     System.out.println("a >> 2  = " + c );
     
     c = a >>> 2;     /* 15 = 0000 1111 */
     System.out.println("a >>> 2 = " + c );
  }
}

运行结果如下:
在这里插入图片描述

运算符号的优先级

我们在数学中运算的时候是有有优先级的,比如我们的乘数要高于加减一样,那当JAVA代码中有多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
在这里插入图片描述

键盘录入和随机函数

我们在之前的练习中自己单独写过很多次类了,那当我在自己创建的类中在使用JAVA中已经封装过的类怎么办呢?我们就需要进行导包才能进行使用,那么我们今天简单地讲一下JAVA给我们提供的类,一个是Scanner(键盘录入)和Random(随机函数)。

键盘录入Scanner

当我们想使用JAVA中自己自带的类怎么使用呢,首先我们需要导包,那么我们应该如何进行导包呢,那需要使用一个关键字“import”,然后在我们代码的最上边进行敲入“import.java.util.Scanner;”即可。

import java.util.Scanner;
public class Test{
	public static void main(){
		/*
		代码
		*/
	}
}

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。那如何创建呢?请看一下代码

Scanner scan = new Scanner(System.in);

接下来我们演示一个最简单的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串:

next()使用方法

import java.util.Scanner; 
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据
        // next方式接收字符串
        System.out.println("next方式接收:");
        String str1 = scan.next();
        System.out.println("输入的数据为:" + str1);
        scan.close();
    }
}

运行结果如下:
在这里插入图片描述
我们可以看到我输入的runoob com中我们空格及以后的字都没有打印出来,那是因为next()这个方法当它读的时候读到空格键、Tab键的空格、回车键就当做是读完了,不会再管后面的还有没有东西了。

nextLine()使用方法

import java.util.Scanner;
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据
 
        // nextLine方式接收字符串
        System.out.println("nextLine方式接收:");
		String str2 = scan.nextLine();
		System.out.println("输入的数据为:" + str2);
        scan.close();
    }
}

运行结果如下:
在这里插入图片描述
在这里我们就可以看到nextLine()方法就可以把我们所输入的信息全部打印出来,那是因为nextLine()方法在对消息的时候它只识别\t(回车键),所以当遇到回车键的时候就当做全都读完了。
当然Scanner用到了I/O里面的流管道,所以我们在我们程序做完后,我们需要把流管道关闭,代码如下:

//创建管道
Scanner scan = new Scanner(System.in);
//那么程序完成后需要把我的管道关闭
scan.close();

那我们总结一下next() 与 nextLine() 区别:

  1. next():
    1)、一定要读取到有效字符后才可以结束输入。
    2)、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
    3)、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
    4)、next() 不能得到带有空格的字符串。
  2. nextLine():
    1)、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
    2)、可以获得空白。

随机函数 Random

刚刚我们介绍了Scanner是如何创建的,那么现在讲的Random创建方式和Scanner的创建方式大概相同,都需要导包,那么请看以下代码:

import java.util.Random;
public class Test{
	public static void main(String[] args){
		Random ran = new Random();
	}
}

我们创建出Random后,它有两个方法是我们经常使用的,nextInt();和nextDouble();两个方法

nextInt()方法使用

  • nextInt() 随机产生一个int范围内的整数
  • nextInt(整数n) 产生一个 [0,n) 随机整数
    代码如下:
import java.util.Random;
public class Test{  
	
	public static void main(String[] args){ 
		//1.导包
		//2.创建该类型的引用或者变量
		Random ran = new Random();
		//3.使用功能
		int i=ran.nextInt();
		System.out.println(i);
		//[0,19)  -->[0,18]
		int i2=ran.nextInt(20);
		System.out.println(i2);
	}
}

nextDouble()使用方法

  • nextDouble() 随机产生[0,1)之间的随机小数
import java.util.Random;
public class Test{  
	
	public static void main(String[] args){ 
		//1.导包
		//2.创建该类型的引用或者变量
		Random ran = new Random();
		//3.使用功能
		//随机小数
		double d=ran.nextDouble();
		System.out.println(d);	
	} 
}

选择控制语句

if语句

if关键字中文意思是如果,其细致的语法归纳来说总共有三种:if语句、if-else语句和if-else if-else语句,下面介绍一下if语句。

单个if语句

条件:是一个值为boolean类型的表达式
满足条件,就执行{}中的语句体,不满足条件,跳过整个if结构

if(条件表达式){
    //功能代码块;
}

if(…){…}else{…}语句

条件:是一个值为boolean类型的表达式
满足条件执行语句体1;不满足条件,执行语句体2

int a = 10;
if(a >= 0){
	//代码
}else{
	//代码
}

if(…){…}else if(…){…}else{…}

条件:是一个值为boolean类型的表达式
满足条件执行语句体1;不满足条件,执行语句体2;不满足条件,执行语句体3等等…
只要{}中的语句体只有一句的时候,前后的{}可以省略

public class Test{
	public static void main(String[] args){
		int score = 100;
		if(score == 100){
            System.out.println("小明的奖励是:BMW车一辆");
        }else if(score > 80){
            System.out.println("小明的奖励是:iphone6s一台");
        }else if(score >= 60){
            System.out.println("小明的奖励是:参考书一本");
        }else{
            System.out.prinln("...");
	}
}

if与条件运算符之间的区别:

  • if可以没有结果,条件运算符肯定有一个结果
  • if可以同时对多个条件进行判断
  • 结果复杂推荐使用if,如果结构简单,推荐使用条件运算符

switch语句

执行流程:

  1. 计算表达式,得到一个结果,值
  2. 第一步算出的结果值与case后的值进行判断,如果相等,就执行对应的语句体,如果不相等,就继续向下判断
  3. 如果执行了语句体,后如果有break,结束整个switch语句,如果没有break会发生case穿透
  4. 如果以上所有case后的值都不满足条件,执行default(接盘侠 else)。

那我们需要注意的是什么呢?

  1. 首先是表达式: 只能为byte,short,char,int,String(jdk1.7之后),枚举(jdk1.5) seo 搜索引擎优化
  2. case穿透: 满足条件的语句体执行之后,如果没有break,下面的case无论是否满足条件,都会执行他们的语句体,直到遇到下一个break或switch的结果而结束
  3. default:位置可以任意改变,break可以省略,但是如果写在switch最后,省略break没有影响,其他位置会发生case穿透
    下面和这个代码就是怎么写
swtich (表达式){
		case1:
			语句体1;
			break;	
		case2:
			语句体2;
			break;
		...
		default:
			语句体n;
			break;
		}

if和switch的区别

if…else

只是单纯地一个接一个比较;if…else每个条件都计算一遍;

switch

  1. 使用了Binary Tree算法;绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true
  2. 编译器编译switch与编译if…else…不同。不管有多少case,都直接跳转,不需逐个比较查询;switch只计算一次值,然后都是test , jmp,
  3. 有很多else if的时候,用switch case比较清晰
  4. switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。

更多内容可以参考 API 文档:http://www.runoob.com/manual/jdk1.6/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值