Java SE基础知识(三)
### 运算符
package com.hyq;
public class demo {
public static void main(String[] args) {
//赋值运算符,比较运算符,算数运算符
/*
A:
逻辑运算符有哪些
&(并且),|(或者),!(非),^异或,&&(短路与),||(短路或)
逻辑运算符的运算结果只能是布尔类型;
*/
int a = 10;
int b = 20;
//并且 运算两端只有左右两端同时为true,其最终结果猜是true,只要一段为false其最终结果都为false;
boolean f = a == b & a > b;
f = a > 1 & b < 100;
f = true & true;
f = false & true;
//| 或者 | 的运算两端,只要任意一算为true ,只有运算两端都为false其最红个结果都为false;
boolean flag = a > b | a < b;
//变量.sout 快速输出这个变量;
System.out.println(flag);
// !非 取反
// System.out.println(!true);
// 异或 ^ 相同为false 不同为true;
}
}
&(并且) &&(短路与) | (或者) ||(短路或)的区别
package com.hyq;
public class mydemo3 {
public static void main(String[] args) {
//ctrl + w 选中代码;
//&(并且) &&(短路与) | (或者) ||(短路或)的区别;
//他们在运算结果上是没有区别的,只是在运算效率上有区别;
int a=10;
int b=20;
boolean f=a>b&b>0;
System.out.println("结果是"+f);
//&左右两端的表达式都需要执行;
//&&当左端为false,右端的表达式就不执行了;
//&&当右端为true,右端的表达式还是需要执行的吗;
boolean s=a>b&&b>0;
System.out.println("结果是"+s);
// | 左右两端的表达式都需要执行;
// || 当左端为false,右端的表达式就不执行了;
// || 当右端为true,右端的表达式还是需要执行的吗;
int c=2;
int d=3;
boolean f3=c>d | d++>0;
System.out.println("结果是"+f3);
boolean f4=c<d | d++>0;
System.out.println("结果是"+f4);
}
}
数值交换
package com.hyq;
public class zhijiaohuan {
public static void main(String[] args) {
//值交换
int a = 10;
int b = 20;
//方式一:通过中间变量进行值交换;
int t=a;
a=b;
b=t;
System.out.println("a:"+a);
System.out.println("b:"+b);
//方式二:利用 ^ 一个数被另一个数位异或两次,该数数值不变;
a=a^b;
b=a^b;//b=a^b^b=a
a=a^b;//a^b^a=a
System.out.println("a:"+a);
System.out.println("b:"+b);
//方式三:
a=a+b;
b=a-b;
a=a-b;
//方式四:
b=a+b-(b=a);
}
}
位运算符
package com.hyq;
public class weiyuansuanfu {
public static void main(String[] args) {
//位运算符 &(与) |(或) ^(异或) ~(按位取反) <<(左移) >>(右移) >>>(无符号右移)
// & | ^ 如果两端是数值,就是位运算符;
// & | ^ 如果两端是布尔类型,就是逻辑运算符;
//注意事项:位运算是直接二级制补码进行运算,运算效率高一些;
// &有0则0;|有1则1;^相同则0 不同则1;~ 1变0 0变1;
// 0 0000011
// 0 0000100
System.out.println(3 & 4);
//结果为0;
System.out.println(3 | 4);
//结果为1;
System.out.println(3 ^ 4);
//结果为;
System.out.println(~3);
// <<左移 <<右移
// 0 0000011 转化为 0 0001100 补码
System.out.println(3<<2);//结果为12
System.out.println(3>>2);//结果为0
// ^异或
// ^ 一个数被另一个数位异或两次,该数不变
int a=10;
int b=20;
System.out.println(a^b^b);//结果为10
System.out.println(a^b^a);//结果为20
System.out.println(a^a);//结果为0
// <<:把<<左边的数据乘以2的移动次幂 例如:10<<3 10*2^3=80;
// >>:把>>右边的数据除以2的移动次幂 例如:10>>3 10/2^3=1(取整)
System.out.println(10<<3);//结果为80
System.out.println(10>>3);//结果为1
}
}
三元运算符
package com.hyq;
public class sanyuanyunsuanfu {
public static void main(String[] args) {
//三元运算符
//表达式?结果1:结果2
//当表达式的结果为true时,返回结果1;为false时,返回结果2;
int a=20;
int b=200;
int c=500;
int max1=a>b?a:b;
int max2=max1>c?max1:c;
System.out.println("最大值为:"+max2);
//ctrl+shift+回车 可以自动补分号;
//嵌套使用三元表达式,但是不建议嵌套,因为阅读性不好;
}
}
键入
package com.hyq;
//导入包
import java.util.Scanner;
public class exmp1keyboard {
public static void main(String[] args) {
//为了后面的案例,键盘录入数据;
//scanner 类 让用户来数据数据;
//1.先导入包;
//2.创建对象;
//3.提示用户输入数据;
//4.录入用户输入数据;
//5.处理数据;
//求两个数的最大值
//创建对象
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个整数:");
//3.录入用户输入的整数
int one = scanner.nextInt();
System.out.println("请输入第二个数:");
int two = scanner.nextInt();
int max=one>two?one:two;
System.out.println("最大值为:"+max);
}
}
用三元表达式实现三位数的最大值
package com.hyq;
import java.util.Scanner;
public class sangeshuzuidazhi {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入第一个数:");
int one = scanner.nextInt();
System.out.println("请输入第二个数:");
int two = scanner.nextInt();
System.out.println("请输入第三个数:");
int three = scanner.nextInt();
int max1=one>two?one:two;
int max2=max1>three?max1:three;
System.out.println("最大值为:"+max2);
}
}
快捷键
alt+enter 万能纠错键,可以纠错,自动补全;
ctrl+alt+v 自动补全
选择语句
public class xuanzeyuju {
public static void main(String[] args) {
//选择语句: if
//if(条件结果是布尔类型的表达式或者值){ 语句体 }
//当圆括号内的结果为true时,才会执行大括号内的语句体;
//条件为假,则执行else语句体;
Scanner scanner=new Scanner(System.in);
System.out.println("请输入第一个数:");
int a=scanner.nextInt();
System.out.println("请输入第二个数:");
int b=scanner.nextInt();
int max=0;
if(a>b){
//System.out.println(a);
max=a;
}else{
// System.out.println(b);
max=b;
}
System.out.println("最大值为:"+max);
}
}
用if语句实现找三位数的最大值
package com.hyq;
import java.util.Scanner;
public class threemaxif {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入第一个数字:");
int a=scanner.nextInt();
System.out.println("请输入第二个数字:");
int b=scanner.nextInt();
System.out.println("请输入第三个数字:");
int c=scanner.nextInt();
//方法一:
// int max1=0;
// int max2=0;
//
// if(a>b){
// max1=a;
// }else {
// max1=b;
// }
//
// if(max1>c){
// max2=max1;
// }else{
// max2=c;
// }
// System.out.println("最大值为:"+max2);
//方法二
int max=0;
if(a>b&&a>c){
max=a;
}
if(b>a&&b>c){
max=b;
}
if(c>b&&c>a){
max=c;
}
System.out.println("最大值为:"+max);
}
}
三元运算符与If语句的区别
//三元表达是能写出来的语句,if语句就能写出来;
//if语句能写出来的语句,三元表达式不一定能写出来;
用if语句实现一个分段函数
package com.hyq;
import com.sun.xml.internal.ws.message.stream.PayloadStreamReaderMessage;
import java.util.Scanner;
//三元表达是能写出来的语句,if语句就能写出来;
//if语句能写出来的语句,三元表达式不一定能写出来;
public class keyboard3 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入x的数值:");
int x=scanner.nextInt();
int y=0;
if(x>=3){
y=2*x+1;
System.out.println("y的值为:"+y);
}
if(x>=-1&&x<3){
y=2*x;
System.out.println("y的值为:"+y);
}
if(x<-1){
y=2*x+1;
System.out.println("y的值为:"+y);
}
}
}
Switch语句
1.switch 语句支持的数据类型 byte short int string char 枚举
2.case项后一定带匹配的常量,不能是变量;
3.多个case的值全部为同一种类型;
4.多个case项的值不能相同重复;
5.break 结束switch语句,这个关键字可以不写,但是有可能会发生一种case穿透的现象;可以利用这种现象;
6.defaut项可以省略不写,不写就没有默认的处理方式,建议写;
package com.hyq;
public class switch1 {
public static void main(String[] args) {
int num=0;
switch(num) {
case 10:
break;
case 20:
break;
case 30:
break;
default://默认项
System.out.println("当所有的case项都没有匹配上,则执行默认项");
break;
}
}
}
用switch语句实现查询季节
package com.hyq;
import java.util.Scanner;
public class switchexp1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您想查询的月份1~12:");
int season = sc.nextInt();
switch (season) {
case 1:
//System.out.println("这是春天!");//可以利用case穿透语句
//break;
case 2:
//System.out.println("这是春天!");
// break;
case 3:
System.out.println("这是春天!");
break;
case 4:
//System.out.println("这是夏天!");
//break;
case 5:
//System.out.println("这是夏天!");
// break;
case 6:
System.out.println("这是夏天!");
break;
case 7:
// System.out.println("这是秋天!");
// break;
case 8:
// System.out.println("这是秋天!");
// break;
case 9:
System.out.println("这是秋天!");
break;
case 10:
//System.out.println("这是冬天!");
//break;
case 11:
// System.out.println("这是冬天!");
// break;
case 12:
System.out.println("这是冬天!");
break;
default://默认项
System.out.println("当所有的case项都没有匹配上,则执行默认项");
break;
}
}
}
用if 语句实现查询季节
package com.hyq;
import java.util.Scanner;
public class switchexp2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请出入您想查询的月份1~12:");
int season=sc.nextInt();
if(season>0&&season<4){
System.out.println("这是春天!");
}
if(season>3&&season<7){
System.out.println("这是夏天!");
}
if(season>6&&season<10){
System.out.println("这是秋天!");
}
if(season>9&&season<13){
System.out.println("这是冬天!");
}
}
}
switch语句和if 语句的区别
switch语句仅仅针对有限个常量进行选择的;
而 if 语句不仅仅能对常量选择,也可以对范围进行选择;