Java第三天

Java第三天

算术运算符的使用(ArithmeticOperator.java)

  1. +,-,*,/,%,++,–

    public class ArithmeticOperator{
    
    	public static void main(String[] args){
    
    		System.out.println(10 / 4);//2
    		System.out.println(10.0 / 4);//2.5
    
    		double d = 10/4;
    		System.out.println(d);//2.0
    
    		//取模的本质 a % b = a - a/b * b
            //当a % b的a是小数时,公式为 a % b = a - (int)a/b * b
    		System.out.println(10 % 3);//1
    		System.out.println(-10 % 3);//-1
    		System.out.println(10 % -3);//1
    		System.out.println(-10 % -3);//-1
    
    	}
    }
    
  2. 自增:++
    作为独立的语句使用:
    ++i和i++都完全等价于i = i + 1;
    作为表达式使用:
    前++:++i先自增后赋值
    后++:i++先赋值后自增

    public class ArithmeticOperatorExercise01{
    
    	public static void main(String[] args){
    		int i = 1;
    		i = i++;//规则使用临时变量:(1) temp = i;(2) i = i+1;(3)i = temp;
    		System.out.println(i);//1
    
    		int i = 1;
    		i = ++i;//规则使用临时变量:(1) i = i+1;(2) temp = i;(3)i = temp;
    		System.out.println(i);//2
    
    	}
    }
    

关系运算符的使用(RelationalOperator.java)

public class RelationalOperator{
    public static void main(String[] args){

        int a = 9;
        int b = 8;
        System.out.println(a > b);//T
        System.out.println(a >= b);//T
        System.out.println(a <= b);//F
        System.out.println(a < b);//F
        System.out.println(a == b);//F
        System.out.println(a != b);//T
        boolean flag = a > b;//T
        System.out.println("flag = " + flag);
    }
}

逻辑运算符

  1. 短路与&&,短路或||,取反(非)!
  2. 逻辑与&,逻辑或|,逻辑异或^
    在这里插入图片描述

文字概述:

  1. a&b:&叫逻辑与:规则:当a和b同时为true,则结果为true,否则为false
  2. a&&b:&&叫短路与:规则:当a和b同时为true,则结果为true,否则为false
  3. a|b:|叫逻辑或:规则:当a和b有一个为true,则结果为true,否则为false
  4. a&b:||叫短路或:规则:当a和b有一个为true,则结果为true,否则为false
  5. !b:!叫取反:规则:当a为true,则结果为false,当a为false,结果为true
  6. ab:叫逻辑异或:规则:当a和b不同时,则结果为true,否则为false

&&和&的使用和区别(LogicOperator01.java)

public class LogicOperator01{

	public static void main(String[] args){

		int age = 50;
		if(age > 20 && age < 90){
			System.out.println("ok1");
		}

		if(age > 20 & age < 90){
			System.out.println("ok2");
		}
	}
}
区别:
  1. **&&短路与:**如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
  2. **&逻辑与:**不管第一个条件是否为false,第二个条件都要判断,效率低
  3. 开发中,我们使用的基本是短语与&&,效率高
int a = 4;
int b = 9;
if(a < 1 && ++b < 50){
	System.out.println("ok3");
}
System.out.println("b = " + b);//b = 9

int a = 4;
int b = 9;
if(a < 1 & ++b < 50){
	System.out.println("ok4");
}
System.out.println("b = " + b);//b = 10

||和|的使用和区别和 &&、&类似


赋值运算符

赋值运算符就是将某个运算后的值,赋给指定的变量

赋值运算符分为 基本赋值运算符 和 复合赋值运算符

复合赋值运算符:

+=,-=,*=,/=,%=等

注意:

  1. 运算顺序从右往左 int num = a + b + c;
    这句话的意思是先计算a+b+c再进行赋值给num,a+b+c的计算还是遵循数学的计算规则

  2. 赋值运算符的左边 只能是变量,右边可以是变量,表达式,常量值
    int num = 20;int num2 = 78*34 - 10;int num3 = a;

  3. 复合赋值运算符等价于下面的效果,比如:
    a += 3; 等价于 a = a + 3;

  4. 复合赋值运算符会进行类型转换(AssignOperator.java)。

    public class AssignOperator{
    
    	public static void main(String[] args){
    		byte b = 3;
    		b += 2;//等价于 b = (byte)(b + 2);
    	}
    }
    

三元运算符

基本语法

条件表达式 ? 表达式1:表达式2;

运算规则
  1. 如果条件表达式为true,运算后的结果是表达式1;
  2. 如果条件表达式为false,运算后的结果是表达式2;
public class TernaryOperator{

	public static void main(String[] args){

		int a = 10;
		int b = 99;
		//1.a > b 为false
		//2.返回 b--,先返回b的值,然后再运算
		//3.返回结果是99
		int result = a > b ? a++ : b--;//99
		System.out.println("result = "+result);		
	}
}
使用细节(TernaryOperatorDetail.java)
  1. 表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换)

    public class TernaryOperatorDetail{
    	public static void main(String[] args){
    		int a = 3;
    		int b = 8;
    		int c = a > b ? (int)1.1 : (int)3.4;//ok
    		//int c = a > b ? 1.1 : 3.4;//错误,1.1和3.4是double类型
    		double d =  a > b ? 1.1 : 3.4;//ok
    	}
    }
    
  2. 三元运算符可以转成if – else语句


运算符优先级

  1. . () {} ; ,
  2. 弹幕运算符 ++ – ~ !{data type}
  3. 算术运算符 * / % + -
  4. 位移运算符 << >> >>>
  5. 比较运算符 < > <= >= instanceof
  6. 逻辑运算符 == != & ^ | && ||
  7. 三元运算符 ? :
  8. 赋值运算符 = *= /= %= += -= <<= >>= >>>= &= ^= |=

标识符的命名规则和规范

标识符概念

  1. Java对各种变量、方法和类等命名时使用的字符序列称为标识符
  2. 凡是自己可以起名字的地方都叫标识符

标识符的命名规则

  1. 由26个英文字母大小写,0-9,_或$组成
  2. 数字不可以开头
  3. 不可以使用关键字和保留字,但能包含关键字和保留字
  4. Java中严格区分大小写,长度无限制。
  5. 标识符不难包含空格

标识符命名规范

  1. 包名:多单词组成时所有字母都小写:aaa.bbb.ccc
  2. 类名,接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz[大驼峰]
    比如:TankShotGame
  3. 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz[小驼峰,简称 驼峰法]
    比如:tankShotGame
  4. 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
    比如:定义一个所得税率 TAX_RATE

键盘输入语句

在编程中,需要接受用户输入的数据,就可以使用键盘输入语句来获取。需要一个扫描器(对象),就是Scanner

步骤:

  1. 导入该类的所在包,java.util.xxx
  2. 创建该类对象(声明变量)
  3. 调用里面的功能
import java.util.Scanner;//表示把java.util下的Scanner类导入
public class Input{
	public static void main(String[] args){
		//Scanner类表示 简单文本扫描器,在java.util包
		//1.引入/导入 Scanner类所在的包
		//2.创建 Scanner 对象 ,new创建一个对象
		Scanner myScanner = new Scanner(System.in);
		//3.接受用户的输入,使用相关的方法
		System.out.println("请输入名字");
		String name = myScanner.next();//接收用户输入的字符串
		System.out.println("请输入年龄");
		int age = myScanner.nextInt();//接受用户输入的int
		System.out.println("请输入薪水");
		double money = myScanner.nextDouble();//接受用户输入的double
		
		System.out.println("人的信息如下:");
		System.out.println("名字:" + name + "年龄:" + age + "薪水:" + money);

	}
}

进制

对于整数,有四种表示方式:

  1. 二进制:0,1,满2进1,以0b或者0B开头
  2. 八进制:0-7,满8进1,以数字0开头表示
  3. 十进制:0-9,满10进1
  4. 十六进制:0-9及A(10)-F(15),满16进1,以0x或者0X开头表示。A-F不区分大小写
int n1 = 0b1010;
int n2 = 01010;
int n3 = 1010;
int n4 = 0x1010;
System.out.println("n1 = "+ n1);//10
System.out.println("n2 = "+ n2);//520
System.out.println("n3 = "+ n3);//1010
System.out.println("n4 = "+ n4);//4112

进制转换

  1. 二进制转十进制:
    规则:从最低位(右边)开始,奖每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
    例子:0b1011 = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 1 + 2 + 0 + 8 = 11
  2. 八进制转十进制:
    规则:从最低位(右边)开始,奖每个位上的数提取出来,乘以8的(位数-1)次方,然后求和
    例子:0234 = 4*8^0 + 3*8^1 + 2*8^2 = 4 + 24 + 128 = 156
  3. 十六进制转十进制:
    规则:从最低位(右边)开始,奖每个位上的数提取出来,乘以16的(位数-1)次方,然后求和
    例子:0x23A = 10*16^0 + 3*16^1 + 2*16^2 = 10 + 48 + 512 = 570
  4. 十进制转换成二进制
    规则:将该数不断除以2,直到商为0未知,然后将每步得到的余数倒过来,就是对应的二进制
    例子:
    34:34%2 = 0 17%2 = 1 8%2 = 0 4%2 = 0 2%2 = 0 1%2 = 1
    所以十进制的34对应二进制的0010 0010
  5. 十进制转换成八进制
    规则:将该数不断除以8,直到商为0未知,然后将每步得到的余数倒过来,就是对应的八进制
    例子:
    131:131%8 = 3 16%8 = 0 2%8 = 2
    所以十进制的131对应八进制的203
  6. 十进制转换成十六进制
    规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制
    例子:
    237:**237%16 = 13(D) 14%16 = 14(E) **
    所以十进制的237对应十六进制的ED
  7. 二进制转成八进制
    规则:从低位开始,将二进制数每三位一组,转成对应的八进制即可
    例子:
    0b11(3)010(2)101(5) => 0325
  8. 二进制转成十六进制
    规则:从低位开始,将二进制数每四位一组,转成对应的十六进制即可
    例子:
    0b1101(D)0101(5) =>0xD5
  9. 八进制转成二进制
    规则:将八进制的每一位转成对应一个3位的二进制数即可
    例子:
    02(010)3(011)7(111) => 0b10011111
  10. 十六进制转成二进制
    规则:将十六进制的每一位转成对应一个4位的二进制数即可
    例子:
    0x2(0010)3(0011)B(1011) => 0b001000111011

原码、反码、补码

对于有符号的而言:

  1. 二进制的最高位是符号位:0表示正数,1表示负数
  2. 正数的原码、反码、补码都一样
  3. 负数的反码 = 它的原码符号位不变,其它位取反
  4. 负数的补码 = 它的反码+1 负数的反码 = 负数的补码 - 1
  5. 0的反码、补码都是0
  6. java没有无符号数,换而言之,java中的数都是由符号的
  7. 在计算机运算的时候,都是以补码的方式来运算的
  8. 当我们看运算结果的时候,要看它的原码

位运算符

java中由7个位运算符(&、|、^、~、>>、<<和>>>)

分别是按位与&、按位或|、按位异或^、按位取反~
运算规则:

按位与& : 俩位全为1,结果为1,否则为0
例子:0b10010001 & 0b11110010 = 0b10010000

按位非| : 俩位由一个为1,结果为1,否则为0
例子:0b10010001 | 0b11110010 = 0b11110011

按位异或^ : 俩位一个为0,一个为1,结果为1,否则为0

例子:0b10010001&0b11110010 = 0b01100011

按位取反~ : 0 -> 1 , 1 -> 0

例子 ~0b10010001 = 0b01101110

运算试题

public class aaa{

	public static void main(String[] args) {
		//2&3
		//1.先得到2的补码 => 2的原码00000000 00000000 00000000 00000010
		//   2的补码 = 2的原码 = 00000000 00000000 00000000 00000010
		//2.3的补码 = 3的原码 = 00000000 00000000 00000000 00000011
		//3.按位与&
		//  00000000 00000000 00000000 00000010
		//  00000000 00000000 00000000 00000011
		//  00000000 00000000 00000000 00000010 &运算后的补码
		// 运算后的原码也是00000000 00000000 00000000 00000010
		// 结果就是 2
		System.out.println(2&3);//2

		//1. 先得到 -2的原码 10000000 00000000 00000000 00000010
		//2. 再得到 -2的反码 11111111 11111111 11111111 11111101
		//3. 再得到 -2的补码 11111111 11111111 11111111 11111110 
		//4. ~-2操作        00000000 00000000 00000000 00000001 运算后的补码
		//5. 运算后的原码    00000000 00000000 00000000 00000001 => 1
		System.out.println(~-2);//1

		//1.先得到   2的原码 00000000 00000000 00000000 00000010
		//2.再得到   2的补码 00000000 00000000 00000000 00000010
		//3.~2操作		  11111111 11111111 11111111 11111101 运算后的补码
		//4.运算后的反码     11111111 11111111 11111111 11111100
		//5.运算后的原码     10000000 00000000 00000000 00000011 => -3
		System.out.println(~2);//-3
        
        //1.先得到 2的原码   00000000 00000000 00000000 00000010
		//2.再得到 2的补码   00000000 00000000 00000000 00000010
		//3.在得到 3的原码   00000000 00000000 00000000 00000011
		//4.在得到 3的补码   00000000 00000000 00000000 00000011
		//5.操作2|3 		  00000000 00000000 00000000 00000010
		// 				   00000000 00000000 00000000 00000011
		//在得到			 00000000 00000000 00000000 00000011 运算后的补码
		//所以运算后的原码是  00000000 00000000 00000000 00000011 =>3
		System.out.println(2|3);//3

		//1.先得到 2的原码   00000000 00000000 00000000 00000010
		//2.再得到 2的补码   00000000 00000000 00000000 00000010
		//3.在得到 3的原码   00000000 00000000 00000000 00000011
		//4.在得到 3的补码   00000000 00000000 00000000 00000011
		//5.操作2^3 		  00000000 00000000 00000000 00000010
		// 				   00000000 00000000 00000000 00000011
		//在得到			 00000000 00000000 00000000 00000001 运算后的补码
		//所以运算后的原码是  00000000 00000000 00000000 00000001 =>1
		System.out.println(2^3);//1
	}
}

关于>>、<<和>>>的运算规则:

  1. 算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
  2. 算术左移 <<:符号位不变,低位补0
  3. >>>逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补0
  4. 特别说明:没有<<<符号

应用案例(BitOperator02.java)

public class BitOperator02{
	public static void main(String[] args) {
		int a = 1 >> 2;
		//1 => 	00000000 00000000 00000000 00000001
		//	=>	00000000 00000000 00000000 00000000
		//本质1 / 2 / 2 = 0
		int c = 1 << 2;
		// 1 => 00000000 00000000 00000000 00000001
		//   => 00000000 00000000 00000000 00000100
		//本质1 * 2 * 2 = 4
		System.out.println(1 >> 2);//0
		System.out.println(1 << 2);//4
		System.out.println(4 << 3);//4 * 2 * 2 * 2 = 32
		System.out.println(15 >> 2);//15 / 2 / 2 = 3

	}
}

程序控制结构

顺序控制

程序从上到下逐行地执行,中间没有人和判断和跳转

分支控制if-else

  1. 单分支
    基本语法
    if(条件表达式){
    ​ 执行代码块;
    }
    当条件表达式为true时,就会执行{}的代码。如果为false就不执行

  2. 双分支
    if(条件表达式){
    ​ 执行代码块1;
    }else{
    ​ 执行代码块2;
    }

    当条件表达式为true时,就会执行代码块1,如果为false就执行代码块2

    public class IfExercise01{
    	public static void main(String[] args) {
    		double d1 = 12.5;
    		double d2 = 15.3;
    
    		if(d1 > 10.0 && d2 < 20.0){
    			System.out.println(d1 + d2);
    		}
    
    		int a = 15;
    		int b = 15;
    
    		if((a+b) % 3 == 0 && (a+b) % 5 == 0){
    			System.out.println("yes");
    		}else{
    			System.out.println("no");
    		}
    
    		int years = 2000;
    		if((years % 4 == 0 && years % 100 != 0) || years % 400 == 0){
    			System.out.println("是闰年");
    		}else{
    			System.out.println("不是闰年");
    		}
    	}
    }
    
  3. 多分支

    if(条件表达式1){
    ​ 执行代码块1;
    }else if(条件表达式2){
    ​ 执行代码块2;
    }…
    else{
    ​ 执行代码块n;
    }

    当条件表达式1为true时,就会执行代码块1,如果为false就会看条件表达式2,如果为true,则执行代码块2,以此类推…如果条件表达式都为false,则输出代码块n
    特别说明:

    1. 多分支可以没有else,如果所有条件表达式都不成立,则一个执行入口都没有
    2. 多分支控制最多只能有一个执行入口

嵌套分支

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构成为内层分支,外面的分支结构称为外层分支
嵌套分支不要超过3层(可读性不好)

基本语法
if(){
​ if(){
​ //if-else…
​ }else{
​ //if-else
​ }
}

import java.util.Scanner;
public class Nestedlf{
	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		
		System.out.print("请输入该歌手的成绩:");
		double score = scanner.nextDouble();

		
	
		if(score > 8.0){
			
			System.out.print("请输入该歌手的性别:");
			char gender = scanner.next().charAt(0);
			
			if(gender == '男'){
				System.out.println("你成功进入男子决赛");
			}else if(gender == '女'){
				System.out.print("你成功进入女子决赛");
			}else{
				System.out.print("你成功进入无性别组决赛");
			}

		}else{
			System.out.print("你没有进入决赛");
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值