/*
* 从控制台读取数据
* 1.导入Java的API Scanner类
* import java.util.Scanner;
* 在package 之后,class之前
* 可以写多个,表示导入多个类
* 可以用*导入一个包(少见,不常用);
* 2.使用Scanner
* 1.创建对象console:控制台
* Scanner console=new Scanner(System.in);
* 2.调用Scanner类型提供的API方法从控制台获取数据
* double d = console.nextDouble();//获取控制台下一个浮点数
*
*
* #运算符
*
* ##关系运行
* 1.运算符号 > < >= <= == !=
* 2.比较两个数值得关系
* 3.比较结果是boolean类型,成立true,不成立false
*
* 案例:
* int age = 18;
* boolean isKid = age < 16 ;
* System.out.println(isKid);//false
* char sex = '男';
* boolean isMan = sex == '男';
* System.out.println(isMan);//true
*
* ##逻辑运算
* 1.运算符 &&(与,并且) ||(或,或者) !(非,否则)
* 2.对boolean 类型数据进行计算,得到boolean类型结果
* 3.运算规则
* && 并且:两个boolean 参与运算,都是true,则返回true
* false && false ---> false 短路与运算 第一个为假,则不再判断第二个。
* false && true ---> false 短路与运算 第一个为假,则不再判断第二个。
* true && false ---> false 不会短路。
* true && true ---> true 不会短路。
* && 运算的逻辑意义:两个都成立才成立
*
* || 或运算:两个boolean参与运算,只有一个是true,返回结果就是true
* false || false ---> false
*
* false || true ---> true
*
* true || false ---> true 短路或运算 第一个为真,则不再判断第二个。
*
* true || true ---> true 短路或运算 第一个为真,则不再判断第二个。
*
* ! 非运算 :单个boolean类型参与运算
* !true ---> false
* !false---> true
*
* 案例:
* //判断某字符是否为大写英文字符
* char c;
* c='B';//'A':65 'B':66 ... 'Z':90
* //只要一个字符的编码属于[65,90]范围就说明是大写英文字符。
* 即:65<=60<=90
* 也就是:'A'<=c 并且 c<='Z';
* 得到 'A'<=c && c<='Z';
* boolean l = 'A'<=c && c<='Z';
* 65<=c && c<=90
* 65<=20013 && 20013<=90
* true && false
* false
* //判断一个字符c,是否为英文字母
* //一个字符c是大写或者是小写
* //(c是大写)||(c是小写)
* //('A'<=c&&c<='Z')||('a'<=c&&c<='z')//不加小括号,逻辑运算优先级也是先&&,再||
*
* char c = 'A';
* boolean l=('A'<=c&&c<='Z')||('a'<=c&&c<='z');
* System.out.println(l);
*
*
* 理解==接受
* 重复一万遍,谎言变成真理。
*
* ##如何从控制台读取一个字符
* 1.Scanner 没有提供读取一个字符的方法
* String str = console.nextLine();
* 2.取字符串中的第一个字符
* char ch = str.charAt(0);
*
* ##赋值运算
* 1.运算符号 =
* 2.将数据从右侧存储到左侧
* 3.赋值运算的优先级非常低,在最后执行
* 4.赋值运算表达有值:是赋值的值
* int a=5,b=6,c=7,d;
* d=a+b%c;
* d=d+2;
* 5.=的结合性:先执行右侧的等号
* a=b=c=5;等价于a=(b=(c=5));
* a=(b=5)+c%3;//工作不要写,工作要注重可读性,越简单越好
*
* System.out.printin(a=8);//整体结果是8
* System.out.printin(a);//结果是2
* System.out.printin(a=8%3);//整体结果是2
* System.out.printin(a);//结果是2
*
* ##扩展赋值运算(复合赋值运算)
* 引子
* //得到偶数序列
* * int i=0;//0
* * i=i+2;//2 可以替换为 i+=2; i增加2,i值先增加2,再赋值给i
* * i=i+2;//4
* * i+i+2;//6
* //复合赋值运算的偶数序列
* * int i =0;
* * i+=2;
* * i+=2;
* * i+=2;
* * i+=2;
* 1.一个2元运算符 ?与 = 复合
* X=X?n 复合为 X?=
* += 表达式X += 5
* -= 表达式X -= 5
* *= 表达式X *= 5
* /= 表达式X /= 5
* %= 表达式X %= 5
* 2.使用方式:先正常写,如果能够简化为复合赋值运算,再进行替换
* 3.复合赋值运算包含强制类型转换计算(好处:自带强转,强转为定义的变量类型)
* int a = 5;
* a *= 4完全等价于a=(int)(a*4);
* a *= 1.4; //a=(int)(a*1.4);
*
* byte b = 6;
* b+=6;//byte b=(byte)(b+6)
*
* 案例:
* double total = 100;
* //total=total*0.5;
* total*=0.5;
* System.out.println(total);
*
*
* !!复合赋值运算,内嵌强制转换类型!!
*
* char c='A';
* System.out.println(c);
* c+=2;//char c = (char)(c+2)
* System.out.println(c);
* c+=2.23;//char c = (char)(c+2.2)
* System.out.println(c);
*
*
* #字符串连接运算
* > 提示:一个符号 "+" 两种功能,称为 **运算符重载**
* (重载:例如:打人、打游戏,都是打,但方法不一样)
*
* 1.运算符 +
* 2.运算规则区别:
* 当 + 的两端都是数值,执行数值加法计算
* 当 + 的一端出现字符串时候,执行字符串连接
* 3.连接时候
* 数值转换为10进制连接
* char类型按照字符进行连接
* boolean 按照 true、false连接
* 4.数值加法和连接运算优先级意义,按照从左到右顺序结合执行
* 1+5+4+"A"+4+5+1//10A451
* 1+5+4+"A"+(4+5+1)//10A10
* 'A'+1+"A"//66A
* 比较
* "A"+1+'A'//A1A
*
* 案例:
* int a =5,b =6;
* char c='A';
* String str ="ABC";
* int n =a+b;//11
* int num=a+c;//70
* String s1=str+a;//字符串连接ABC5
* String s2=a+str;//字符串连接5ABC
* String s3=c+str;//AABC
* String s4=str+'c';//字符串连接ABCc
*
* 5.三目运算符
* int a>5 ? a-1:a+1;
*
* 结果总行数:rows=110行
* 每页行数 size = 25 ;
* 计算一共有多少页 ?
*
* int a = 110%25==0 ? a :a+1;
* int pages,rows,size;
* //page 代表计算以后的页数
* //rows 是已知行数
* //size 每页行数
* Scanner scan=new Scanner(System.in);
* System.out.println("输入总行数:");
* rows=scan.nextInt();
* System.out.println("输入每页行数:");
* size=scan.nextInt();
* pages =rows%size>0?rows/size+1:rows/size;
* System.out.println("页数:"+pages);
*
*
* 三目运算可以嵌套,但一般不用,可读性差。
*
* !(非)是单目运算
* int year;
* ((year%4==0)&&!(year%400==0))||(year%400==0);//没括也正确
* year%4==0&&!year%400==0||year%400==0;
*
*
*/
* 从控制台读取数据
* 1.导入Java的API Scanner类
* import java.util.Scanner;
* 在package 之后,class之前
* 可以写多个,表示导入多个类
* 可以用*导入一个包(少见,不常用);
* 2.使用Scanner
* 1.创建对象console:控制台
* Scanner console=new Scanner(System.in);
* 2.调用Scanner类型提供的API方法从控制台获取数据
* double d = console.nextDouble();//获取控制台下一个浮点数
*
*
* #运算符
*
* ##关系运行
* 1.运算符号 > < >= <= == !=
* 2.比较两个数值得关系
* 3.比较结果是boolean类型,成立true,不成立false
*
* 案例:
* int age = 18;
* boolean isKid = age < 16 ;
* System.out.println(isKid);//false
* char sex = '男';
* boolean isMan = sex == '男';
* System.out.println(isMan);//true
*
* ##逻辑运算
* 1.运算符 &&(与,并且) ||(或,或者) !(非,否则)
* 2.对boolean 类型数据进行计算,得到boolean类型结果
* 3.运算规则
* && 并且:两个boolean 参与运算,都是true,则返回true
* false && false ---> false 短路与运算 第一个为假,则不再判断第二个。
* false && true ---> false 短路与运算 第一个为假,则不再判断第二个。
* true && false ---> false 不会短路。
* true && true ---> true 不会短路。
* && 运算的逻辑意义:两个都成立才成立
*
* || 或运算:两个boolean参与运算,只有一个是true,返回结果就是true
* false || false ---> false
*
* false || true ---> true
*
* true || false ---> true 短路或运算 第一个为真,则不再判断第二个。
*
* true || true ---> true 短路或运算 第一个为真,则不再判断第二个。
*
* ! 非运算 :单个boolean类型参与运算
* !true ---> false
* !false---> true
*
* 案例:
* //判断某字符是否为大写英文字符
* char c;
* c='B';//'A':65 'B':66 ... 'Z':90
* //只要一个字符的编码属于[65,90]范围就说明是大写英文字符。
* 即:65<=60<=90
* 也就是:'A'<=c 并且 c<='Z';
* 得到 'A'<=c && c<='Z';
* boolean l = 'A'<=c && c<='Z';
* 65<=c && c<=90
* 65<=20013 && 20013<=90
* true && false
* false
* //判断一个字符c,是否为英文字母
* //一个字符c是大写或者是小写
* //(c是大写)||(c是小写)
* //('A'<=c&&c<='Z')||('a'<=c&&c<='z')//不加小括号,逻辑运算优先级也是先&&,再||
*
* char c = 'A';
* boolean l=('A'<=c&&c<='Z')||('a'<=c&&c<='z');
* System.out.println(l);
*
*
* 理解==接受
* 重复一万遍,谎言变成真理。
*
* ##如何从控制台读取一个字符
* 1.Scanner 没有提供读取一个字符的方法
* String str = console.nextLine();
* 2.取字符串中的第一个字符
* char ch = str.charAt(0);
*
* ##赋值运算
* 1.运算符号 =
* 2.将数据从右侧存储到左侧
* 3.赋值运算的优先级非常低,在最后执行
* 4.赋值运算表达有值:是赋值的值
* int a=5,b=6,c=7,d;
* d=a+b%c;
* d=d+2;
* 5.=的结合性:先执行右侧的等号
* a=b=c=5;等价于a=(b=(c=5));
* a=(b=5)+c%3;//工作不要写,工作要注重可读性,越简单越好
*
* System.out.printin(a=8);//整体结果是8
* System.out.printin(a);//结果是2
* System.out.printin(a=8%3);//整体结果是2
* System.out.printin(a);//结果是2
*
* ##扩展赋值运算(复合赋值运算)
* 引子
* //得到偶数序列
* * int i=0;//0
* * i=i+2;//2 可以替换为 i+=2; i增加2,i值先增加2,再赋值给i
* * i=i+2;//4
* * i+i+2;//6
* //复合赋值运算的偶数序列
* * int i =0;
* * i+=2;
* * i+=2;
* * i+=2;
* * i+=2;
* 1.一个2元运算符 ?与 = 复合
* X=X?n 复合为 X?=
* += 表达式X += 5
* -= 表达式X -= 5
* *= 表达式X *= 5
* /= 表达式X /= 5
* %= 表达式X %= 5
* 2.使用方式:先正常写,如果能够简化为复合赋值运算,再进行替换
* 3.复合赋值运算包含强制类型转换计算(好处:自带强转,强转为定义的变量类型)
* int a = 5;
* a *= 4完全等价于a=(int)(a*4);
* a *= 1.4; //a=(int)(a*1.4);
*
* byte b = 6;
* b+=6;//byte b=(byte)(b+6)
*
* 案例:
* double total = 100;
* //total=total*0.5;
* total*=0.5;
* System.out.println(total);
*
*
* !!复合赋值运算,内嵌强制转换类型!!
*
* char c='A';
* System.out.println(c);
* c+=2;//char c = (char)(c+2)
* System.out.println(c);
* c+=2.23;//char c = (char)(c+2.2)
* System.out.println(c);
*
*
* #字符串连接运算
* > 提示:一个符号 "+" 两种功能,称为 **运算符重载**
* (重载:例如:打人、打游戏,都是打,但方法不一样)
*
* 1.运算符 +
* 2.运算规则区别:
* 当 + 的两端都是数值,执行数值加法计算
* 当 + 的一端出现字符串时候,执行字符串连接
* 3.连接时候
* 数值转换为10进制连接
* char类型按照字符进行连接
* boolean 按照 true、false连接
* 4.数值加法和连接运算优先级意义,按照从左到右顺序结合执行
* 1+5+4+"A"+4+5+1//10A451
* 1+5+4+"A"+(4+5+1)//10A10
* 'A'+1+"A"//66A
* 比较
* "A"+1+'A'//A1A
*
* 案例:
* int a =5,b =6;
* char c='A';
* String str ="ABC";
* int n =a+b;//11
* int num=a+c;//70
* String s1=str+a;//字符串连接ABC5
* String s2=a+str;//字符串连接5ABC
* String s3=c+str;//AABC
* String s4=str+'c';//字符串连接ABCc
*
* 5.三目运算符
* int a>5 ? a-1:a+1;
*
* 结果总行数:rows=110行
* 每页行数 size = 25 ;
* 计算一共有多少页 ?
*
* int a = 110%25==0 ? a :a+1;
* int pages,rows,size;
* //page 代表计算以后的页数
* //rows 是已知行数
* //size 每页行数
* Scanner scan=new Scanner(System.in);
* System.out.println("输入总行数:");
* rows=scan.nextInt();
* System.out.println("输入每页行数:");
* size=scan.nextInt();
* pages =rows%size>0?rows/size+1:rows/size;
* System.out.println("页数:"+pages);
*
*
* 三目运算可以嵌套,但一般不用,可读性差。
*
* !(非)是单目运算
* int year;
* ((year%4==0)&&!(year%400==0))||(year%400==0);//没括也正确
* year%4==0&&!year%400==0||year%400==0;
*
*
*/