分支(選擇)語句
回顧:
1 標識符:對包、類、變量、方法、參數命名使用的字符序列。
2 標識符的命名規則:
3 標識符的命名習慣:
4 關鍵字、保留字
5 常量:程序運行中固定不變的數據。
6 變量:內存中的一塊存儲空間, 存儲的就是常量,可以變化。包括變量的類型 、變量名、變量值
7 數據類型:基本數據類型和引用數據類型
基本數據類型:byte short int long float double char boolean
引用數據類型:類、接口、數組、枚舉、注解 (String)
8 運算符和表達式
算術運算符: + - * / % ++ --
賦值運算符:= += -= *= /+
關系運算符:== != > < >= <=
邏輯運算符:& | ! ^ && ||
位運算符:& | ~ ^ >> << >>>
字符串連接符:+
三目運算符:?:
9 Scanner 鍵盤錄入
今天任務:
1.三種程序基本結構
2.if語句
3.switch語句
教學目標:
1.理解什么是基本結構
2.掌握分支語句
3.掌握if語句
4.掌握switch語句
第一節:程序基本結構
- 順序結構
- 選擇結構
- 循環結構
1.1 順序結構
程序從上到下一行一行的執行代碼,沒有判斷和中轉。
1.2 選擇結構
有選擇性的執行或者跳過指定代碼
1.3 循環結構
重復執行一段代碼,直到條件不成立。
Java的選擇結構使用選擇語句來實現:
1 if語句
2 switch語句
第二節:if語句
if語句有四種使用形式:
- if(條件){…}
- if(條件){…}else{…}
- if(條件){…}else if(條件){…}else{…}
- if(條件){ if(條件){...} } else {...}
2.1 簡單if語句
if ( 條件 ) {
//代碼塊
}
示例1:java成績如果大於60,獎勵一顆糖
//簡單的if語句:
//成績如果大於60 給獎勵
int score = 10;
if(score>60){
System.out.println("給顆糖");
}
示例2:Java成績大於98分,而且Html成績大於80分,老師獎勵他;或者Java成績等於100分,Html成績大於70分,老師也可以獎勵他。
if((score1 >98 && score2 > 80 ) || ( score1 == 100 && score2 > 70 )){
//獎勵
}
javac:把java文件編譯為class(字節碼)文件
java:執行java程序
javap:把class文件反編譯為虛擬機指令
javap -c
javap -v
2.2 if-else語句
if ( 條件 ) {
//代碼塊1
}else{
//代碼塊2
}
示例1:如果是男生就永遠18歲,否則永遠16歲。
// 如果是男生 就永遠18歲
// 如果是 女生 永遠16歲
char c = '女';
if(c == '男'){// boolean 結果是true 執行if中 否則執行else中的
System.out.println("永遠18歲");
}else{
System.out.println("永遠16歲");
}
上機練習1:買體育彩票
如果體彩中了500萬,我買車、買房、歐洲旅游
如果沒中,繼續買。
public static void main(String[] args){
//1創建input對象
Scanner input=new Scanner(System.in);
//2提示
System.out.println("中500萬嗎?Y/N");
String answer=input.next();
//3判斷
if(answer.equals("y")){ //字符串的判斷使用equals方法
System.out.println("買房、買車、歐洲旅游...");
}else{
System.out.println("繼續買....");
}
}
注意:字符串的判斷使用equals方法
上機練習2:輸入四位數字的會員號的百位數字等於產生的隨機數字即為幸運會員,提示恭喜您中獎了,否則沒中獎。
提示: int random=(int)(Math.random()*10); //隨機數
注意:Math.random();產生0-1之間的一個數字,含0不含1
public static void main(String[] args){
//創建Input對象
Scanner input=new Scanner(System.in);
//提示
System.out.println("請輸入四位的會員號:");
int member=input.nextInt();
//百位
int bai=member/100%10;
int ran=(int)(Math.random()*10); //Math.random();產生0-1之間的一個數字,含0不含1
if(bai==ran){
System.out.println("中獎了....旅游去吧");
}else{
System.out.println("好好干活...");
}
}
2.3 多重if語句
if ( 條件1) {
//代碼塊1
}
else if (條件2) {
//代碼塊2
}
...
else {
//代碼塊3
}
示例1:如果成績大於90並且是男生就送個女朋友,成績大於90並且是女生送個男朋友,否則...
char c = '女';
int score = 10;
if(score>90 && c=='男'){
System.out.println("給送個女朋友");
}else if(score>90 && c=='女'){
System.out.println("給送個男朋友");
}else{
System.out.println("啥都沒有,自己買");
}
上機練習 1:
我想買車,買什么車決定於我在銀行有多少存款
如果我的存款超過500萬,我就買保時捷
否則,如果我的存款超過100萬,我就買寶馬
否則, 如果我的存款超過50萬,我就買帕薩特
否則, 如果我的存款超過10萬,我就買qq
否則, 如果我的存款10萬以下 ,我買捷安特
2.4 嵌套if語句
if(條件1) {
if(條件2) {
代碼塊1
} else {
代碼塊2
}
} else {
代碼塊3
}
示例:如果成績大於90 如果是男生送個寶馬, 如果是女生送個LV
// 如果成績大於90 如果是男生 如果是女生
int score = 10;
if(score>90){
if(c=='男'){
System.out.println("給送個寶馬");
}else{
System.out.println("給送個LV");
}
}
2.5 特殊的if語句(不推薦使用)
// 特殊形式
// 必須要求 if 或者 else 語句中只能有一條語句
if(score>60)
System.out.println("有獎勵");
else
System.out.println("啥都沒有");
上機練習1:輸入四個季節:如果春天,輸出“春暖花開”,如果是夏天,輸出“夏日炎炎”,如果是秋天,則輸出"秋高氣爽",如果是冬天,則輸出"安靜祥和"。
// 1
import java.util.Scanner;
class Demo8
{
public static void main(String[] args)
{
// == 判斷基本數據類型內容是否相等
// 引用數據類型 == 判斷內存地址
// 判斷內容 String 類型 判斷內容 equals
Scanner sc = new Scanner(System.in);
String str = sc.next();
// boolean falg= str.equals("春天");
if(str.equals("春天")){
System.out.println("春暖花開");
}else if(str.equals("夏天") ){
System.out.println("夏日炎炎");
}else if(str.equals("秋天")){
System.out.println("秋高氣爽");
}else if(str.equals("冬天")){
System.out.println("安靜祥和");
}
}
}
第三節: switch語句
switch只適合做等值判斷。
語法結構:
switch(表達式){
case 常量1:
代碼塊1;
break;
case 常量2 :
代碼塊2;
break;
case 常量3 :
代碼塊3;
break;
...
default:
默認代碼塊;
break;
}
3.1 switch語法規則
- 表達式expr的值必須是下述幾種類型之一:
byte、short、int、char、enum(枚舉);java7之后可以是String。
- case子句中的值const 必須是常量值(或final的變量),case中的值不能是一個范圍
- 所有case子句中的值應是不同的,否則會編譯出錯;
- default子句是可選的(不是必須的)
- break語句用來在執行完一個case分支后使程序跳出switch語句塊;否則會繼續執行下去
3.2 語法格式
switch(表達式expr){
case const1:
statement1;
break;
case const2:
statement2;
break;
… …
case constN:
statementN;
break;
default:
statement_dafault;
break;
}
3.3 執行順序:
1 如果表達式的值和case 相等,就執行case中的代碼,如果所有的 case 都不滿足需求的時候, 執行default中的內容
2 break 幫助跳出switch 語句, 如果執行過程中 沒有遇到break 繼續向下執行直到遇到break為止。
3.4 練習:
練習一: 簡單實現switch語句
int count = 1;
switch(count){
case 1:
System.out.println("獎勵iphonexs");
break;
case 2:
System.out.println("獎勵xiaomi");
break;
case 3:
System.out.println("獎勵200元");
break;
default:
System.out.println("給個彩票");
break;
}
練習二: 判斷 春夏秋冬
Scanner sc = new Scanner(System.in);
String str = sc.next();
switch(str){
case "春天":
System.out.println("春暖花開");
break;
case "夏天":
System.out.println("悶熱");
break;
case "秋天":
System.out.println("秋高氣爽");
break;
case "冬天":
System.out.println("滴水成冰");
break;
default:
System.out.println("火星的");
break;
}
練習三: 需求: 利用switch實現一個計算器操作
import java.util.Scanner;
public class Demo13{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.println("請輸入第一個操作數");
int num1=input.nextInt();
System.out.println("請輸入運算符");
String ope=input.next();
System.out.println("請輸入第二個操作數");
int num2=input.nextInt();
int result=0;
switch(ope){
case "+":
result=num1+num2;
break;
case "-":
result=num1-num2;
break;
case "*":
result=num1*num2;
break;
case "/":
if(num2!=0){
result=num1/num2;
}else{
System.out.println("除數不能為0");
}
break;
case "%":
result=num1%num2;
break;
default:
System.out.println("輸入有誤");
break;
}
System.out.println("運算結果是:"+result);
}
}
3.5 特殊用法 :case穿透
case穿透: 產生這種現象的原因:由於某個case語句中缺少或者漏寫break語句所導致的結果。
// 需求: 打印輸出指定的月份的天數
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("31天");
break;
case 2:
System.out.println("28天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println("30天");
break;
}
System.out.println("Hello World!");
}
第四節:總結
1 程序三種基本結構
順序結構
選擇結構
循環結構
java 選擇結構:
if 語句
使用形式
if(條件){....}
if(條件){...} else{...}
if(條件){...} else if(條件){...}else if(條件){...} else{...}
if(條件){ ... if(條件){...} } else{...}
switch (等值判斷)
switch(變量表達式){
case 常量1:
....
break;
case 常量2:
....
break;
}
變量表達式類型:byte short int char String 枚舉
case 常量不能重復
default 可以省略
break 不要省略,如果省略會出現case穿透
默寫
一、變量的分類——按照數據類型來分:
1.基本數據類型(8種):
1)數值型:
*整型:byte(-128~127) short int long
*浮點型: float double
2)字符型:char char類型占的是一個字符=兩個字節=十六位
3)布爾型:boolean 注意,布爾類型的變量只有兩種值:true false
2.引用數據類型:類、接口、數組、枚舉
注意:除了基本數據類型以外的數據類型都是引用數據類型.
二、數據類型轉換:
發生的場景:不同類型的變量之間進行運算
數據類型的轉換分為兩種:
1)自動類型轉換:byte short char ==>int==>long==>float==>double
注意:a.當byte short char 之間進行運算時結果屬於int型;
b.boolean類型不可以轉換為其它的數據類型。
2)強制類型轉換:將容量大的數據類型強制轉換成容量小的數據類型,必須使用"(目標數據類型)"符號;
格式是:小的數據類型 = (小的數據類型)大的數據類型。
注意:強轉后會造成精度的損失(丟失),丟的是高位。
三、算術運算符:+ - * / % ++ --
1.取模:% 取余數,結果的符號取決於被模數的符號。
2.++:讓變量的值自增1
1)前++:++在變量的前面,先自增1,后運算
2)后++:++在變量的后面,先運算,再自增1
3.--:讓變量的值自減1
1)前--:--在變量的前面,先自減1,再運算
2)后--:--在變量的后面,先運算,再自減1
四、賦值運算符: = += -= *= /= %=
五、比較運算符:== < > <= >= !=
六、邏輯運算符: & && | || ! ^ (運算符兩端是條件表達式)
1.邏輯與和短路與的區別: & &&
1)邏輯與:& 無論左端是否為false,右端都會執行。
2)短路與:&& 只要左端是false,則右端不執行,結果都為false。
2.邏輯或和短路或的區別:| ||
1)邏輯或:| 無論左端是否為true,右端都會執行。
2)短路或:|| 只要左端是true,則右端不執行,結果都為true。
注意:在日常開發中,我們建議使用短語與、短路或。
作業
1.編程實現已知某人的工資(要求輸入),求他應該繳納的個人所得稅以及最后得到的工資。
個人所得稅計算方法計算方法 :
全月應納稅所得額 =工資薪金所得-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
2.編寫程序,給定一個學生成績,給出相應等級:
90~100 優秀
80~89 良好
70~79 中等
60~69 及格
0~59 不及格
使用兩種作法
3.從鍵盤接收一個名次(int) 使用switch-case作如下分支
名次為1 獎IPHONE8
名次為2 獎IPHONE7
名次為3 獎IPHONE6
名次為4 獎IPHONE5
其它名次 努力吧,少年
4. 編寫程序,判斷給定的某個年份是否是閏年。
閏年的判斷規則如下:
(1)若某個年份能被4整除但不能被100整除,則是閏年。
(2)若某個年份能被400整除,則也是閏年。
5.定義三個整型變量x,y,z,從鍵盤初始化變量值,判斷三個變量的大小,將較大的值賦給變量max,將max輸出,輸入使用Scanner輸入。
面試題
1.switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2.switch中default的位置是否必須出現在最后?不一定