一. 位运算符(了解)
-
定义
- 对数值进行二进制的位运算
- 在位运算中 0 为假, 1为真
-
分类
- & : 有0则为0
- | : 有1则为1
- ^ : 相同为0 , 不同为1
- ~ : 按位取反
- >> : 有符号右移(进行2的倍数的除法时速度非常快)
- << : 有符号左移
- >>> : 无符号右移
-
演示
public static void main(String[] args) { int a = 10; //二进制表现为 1010 int b = 5; //二进制表现为 0101 System.out.println(a&b); System.out.println(a|b); System.out.println(a^b); System.out.println(~a); System.out.println(a>>1);//右移一位 相当于除以2 System.out.println(a<<1);//左移一位,相当于乘以2 System.out.println(a>>>1);//无符号位移,缺失的首位补0 }
-
注意事项
- 一个数异或同一个数两次,结果还是本身
-
测试题
- 不借助第三个变量的前提下交换两个整数变量的值
public class TestDemo{
public static void main(String[] args){
//采用加法运算的方法
int a = 1;
int b = 2;
a = a + b;
b = a - b;//等同于b=a+b-b;
a = a - b;//等同于a=a+b-(a+b-b);
//采用按位异或运算的方法
int a = 1;
int b = 2;
a = a ^ b;
b = a ^ b;//等同于a^b^b;
a = a ^ b;//等同于a^(a^b);
}
}
二. 三元运算符
-
格式
- boolean ? 结果1 : 结果2;
- boolean为true,返回结果1,否则返回结果2
-
演示
-
获取两个数中最大的值
public static void main(String[] args) { int a = 10; int b = 20; //如果a大于b的话,结果为真,就返回a int max = a > b ? a : b; System.out.println(max); }
-
三. 从键盘获取数据
-
步骤
- 导入 java.util.Scanner;
- 创建Scanner对象 Scanner sc = new Scanner(System.in);
- 调用nextInt()方法获取一个整数 sc.nextInt();
-
演示
//导入类 import java.util.Scanner; public class TestDemo { public static void main(String[] args) { //创建键盘录入对象,打开键盘通道 Scanner sc = new Scanner(System.in); //调用方法获取一个整数 int i = sc.nextInt(); System.out.println(i); } }
四. 控制语句
-
定义
- 一个程序,想要更加健壮, 就必须能够应对各种各样的状况, 根据实际情况来判定直接结果
- 所以, 对于程序也应该是根据不同的情况来执行不同的顺序和语句
- 控制语句就可以控制流程的走向和顺序
-
分类
- 顺序结构
- 选择结构
- 循环结构
五. 顺序结构
-
定义
- 按照生活中的习惯, 从上往下,依次执行
-
演示
public static void main(String[] args) { //程序会从上往下依次执行 System.out.println("第一句话"); System.out.println("第二句话"); System.out.println("第三句话"); }
六. 选择结构(判断结构)
-
定义
- 可以控制部分语句执行,或跳过一部分语句
-
分类
- if 语句
- switch语句
七. if 语句格式一
-
格式
if(boolean){ //执行语句 }
-
执行流程
- 先计算if关键字后面的表达式, 看其返回值是true还是false
- 如果是true ,就执行后面大括号中的代码
- 如果是false, 就不执行
-
演示
public static void main(String[] args) { int a = 1; if(a>0){ System.out.println("语句体执行了"); } }
-
注意事项
- if 后面的小括号里面无论写什么, 结果都必须是boolean值
- if 语句控制的语句体如果是一条语句,大括号可以省略, 如果是多条语句, 就不能省略,建议永远不要省略
- 一般来说, 有左大括号就没有分号, 有分号,就没有左大括号
-
测试题
- 只有年龄超过18岁的学生才能玩游戏, 现在编一个程序,来判断一个学生是否可以玩游戏
public class TestDemo02{
public static void main(String[] args) {
int age = 22;
if(age>18){
System.out.println("pubg");
}
else if (age>12) {
System.out.println("LOL");
}
else if (age>6) {
System.out.println("honor of king");
}
else System.out.println("xuandouxiaoq");
}
}
八. if 语句格式二
-
格式
if(boolean){ //语句体1 }else{ //语句体2 }
-
执行流程
- 首先计算if后面小括号内的表达式的值, 看其返回值是true还是false
- 如果是true , 就执行语句体1
- 如果是false, 就执行语句体2
-
案例演示
public static void main(String[] args) { int i = 1; if(i>=18){ System.out.println("终于可以玩游戏了"); }else{ System.out.println("哎... 再等等吧"); } }
-
注意事项
- else 后面是没有表达式的, 只有if后面有
- 如果语句体只有一句话, 可以省略大括号,建议不要省略
- 三元运算符就是这种格式的简写形式,三元运算符可以实现的,这种格式都可以,反之不行
-
测试题
- 妻子嘱咐程序猿丈夫回家的时候买10苹果, 如果碰到卖西瓜的买一个,编程模拟场景
-
测试题
- 如果成绩大于90 ,如果是男生送一个女朋友 , 如果是女生送一个吴彦祖
九. if 语句格式三
-
格式
if(boolean){ //语句体1 }else if(boolean){ //语句体2 }else{ //语句体3 }
-
执行流程
- 首先计算if 后面括号内的表达式, 看其返回值结果
- 如果是true就执行语句体1, if语句结束
- 如果是false , 就执行下一个else if后面括号中的表达式,看其结果
- 如果是true ,就执行语句体2
- 如果是false , 就接着判断下一个else if后面表达式的结果
- 以此类推, 直到最后执行else语句结束
- 如果中途有一个if或者else if 后的括号判断结果是true ,则之后的代码都不再执行
-
注意事项
- 最后一个else可以省略, 但建议不要省略, 可以对有效值范围外的错误值进行提示
-
演示
public static void main(String[] args) { int i = 10; if(i>18){ System.out.println("吃鸡"); }else if(i>10){ System.out.println("LOL"); }else if(i>3){ System.out.println("王者农药"); }else{ System.out.println("泡妞"); } }
-
测试题
-
从键盘录入一个学生的成绩, 判断其成绩的等级
100 学神
90-99 学霸
80-89 优
70-79 良
60-69 及格
0-59 再接再厉
-
import java.util.Scanner;
public class TestDemo03{
public static void main(String[] args) {
System.out.println("please input your score:");
Scanner in = new Scanner(System.in);
int score = in.nextInt();
if(score==100){
System.out.println("ヾ(≧▽≦*)oヾ");
}
else if (score>=90&&score<100) {
System.out.println("φ(* ̄0 ̄)");
}
else if (score>=80&&score<90) {
System.out.println("[]~( ̄▽ ̄)~*");
}
else if (score>=70&&score<100) {
System.out.println(" <( ̄︶ ̄)↗");
}
else if (score>=60&&score<70) {
System.out.println(" (✿◡‿◡)");
}
else if (score>=0&&score<60) {
System.out.println(" `(*>﹏<*)′");
}
else System.out.println("rua~");
}
}
十. switch 语句
-
格式
switch(值){ case 值1: //语句体1; break; case 值2: //语句体2; break; //...... default: //语句体3; break; }
-
执行流程
-
先看switch括号中的值
-
然后和case后面的值匹配, 如果有就执行这个case后面的语句, 否则执行default 控制的语句
-
-
注意事项
- case后面只能是常量, 不能是变量, 多个case后面不能出现相同的值
- switch后面的值的类型只能是byte, short ,int ,字符, 字符串 , 枚举
- 结束条件: 执行到break , 或者代码运行完毕结束,如果一直遇不到break就会一直执行
- defautl 可以省略, 但是建议不要省略
-
演示
public static void main(String[] args) { //输入数值,打印对象的星期数 int week = 5; switch (week) { case 1: System.out.println("星期一"); 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; default: System.out.print("您的输入有误"); break; } }
-
case穿透
- 当程序执行某个case后的代码,但是没有遇到break的时候, 就会一直执行下面的所有可执行的语句
public static void main(String[] args) { int week = 1; switch (week) { case 1: System.out.println("语句1......"); break; case 2: System.out.println("语句1......"); break; case 3: System.out.println("语句1......"); break; default: System.out.print("其他情况"); break; } }
-
测试题
- 使用switch语句改写判断学生成绩的等级
import java.util.Scanner;
public class TestDemo05{
public static void main(String[] args) {
System.out.println("please input your score:");
Scanner in = new Scanner(System.in);
int score = in.nextInt();
switch(score/10){
case 10:
System.out.println("...");
break;
case 9:
System.out.println("...");
break;
case 8:
System.out.println("...");
break;
case 7:
System.out.println("...");
break;
case 6:
System.out.println("...");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
System.out.println("...");
break;
default:
System.out.println("data Error");
break;
}
}
}
-
测试题
- 判断 春夏秋冬 打印输出 春天 春暖花开 夏天 夏天打盹 秋天 秋高气爽 冬天 冬眠
import java.util.Scanner;
public class TestDemo04{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("please input season");
String str = in.next();
switch(str){
case "spring":
System.out.println("spring is suitable to zzzzz");
break;
case "summer":
System.out.println("summer is suitable to zzzzz");
break;
case "autumn":
System.out.println("autumn is suitable to zzzzz");
break;
case "winter":
System.out.println("winter is suitable to zzzzz");
break;
default:
System.out.println("I like sleeping");
break;
}
}
}
-
测试题
- 利用switch实现一个计算器操作
- 第一次输入一个整数
- 第二次输入一个运算符
- 第三次输入整数
- 利用switch实现一个计算器操作
import java.util.Scanner;
public class TestDemo06{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("please input first integer:");
int a = in.nextInt();
System.out.println("please input the operator:(+ - * /)");
String str = in.next();
System.out.println("please input second integer:");
int b = in.nextInt();
switch(str){
case "+":
System.out.println((a+b));
break;
case "-":
System.out.println((a-b));
break;
case "*":
System.out.println((a*b));
break;
case "/":
System.out.println((a/b));
break;
default:
System.out.println("operator is not permitive!");
break;
}
}
}
总结:
-
位运算
- ^ : 一个数异或另一个数两次,结果还是自己
- >>n : 相当于除以 2 的n次方
-
三元运算符
- boolean? 结果1:结果2
- if else的简写形式
-
键盘录入
- 导包
- 和键盘建立连接
- 调用方法获取数据
-
控制语句
- 顺序结构
- 选择结构
- 循环结构
-
if语句
if(boolean){ }
if(boolean){ }else{ }
if(boolean){ }else if(boolean){ }.... else{ }
-
switch 语句
- 可以接收的值 : int String 枚举
- case穿透 : 执行没有碰到break,会继续往下执行 ,直到碰到break或碰到右大括号
- case后面的值不能重复
作业
-
第一题
- 饭店里面有五道菜, 黄花鱼 200块, 烤鸭 100块, 红烧肉 60块, 小炒肉 40块, 白水豆腐 10块
- 一个客人进了饭店, 根据身上的钱来决定最好能吃哪道菜 , 编程模拟
-
第二题
- 从键盘接收一个名次(int) 使用switch-case作如下分支
名次为1 奖IPHONExs Max
名次为2 奖IPHONE8
名次为3 奖IPHONE7
名次为 4 奖IPHONE6
其它名次 努力吧,少年
- 从键盘接收一个名次(int) 使用switch-case作如下分支
-
第三题
-
编写程序,判断给定的某个年份是否是闰年
闰年的判断规则如下:(1)若某个年份能被4整除但不能被100整除,则是闰年。 (2)若某个年份能被400整除,则也是闰年。
-
-
扩展题
-
编程实现已知某人的工资(要求输入),求他应该缴纳的个人所得税以及最后得到的工资。
个人所得税计算方法计算方法 :
全月应纳税所得额 =工资薪金所得-3500
应纳税额 = 应纳税所得额 *税率-速算扣除数
级数 全月应纳税所得额 税率(%) 速算扣除数
1 不超过500元的 5 0
2 超过500元至2000元的部分 10 25
3 超过2000元至5000元的部分 15 125
4 超过5000元至20000元的部分 20 375
5 超过20000元至40000元的部分 25 1375
6 超过40000元至60000元的部分 30 3375
7 超过60000元至80000元的部分 35 6375
8 超过80000元至100000元的部分 40 10375
9 超过100000元的部分 45 15375
-
网友评论