今天內容安排:
1河狐、猜數(shù)字小游戲
1返咱、超市購物小票加入業(yè)務邏輯
01猜數(shù)字游戲需求.avi
02隨機數(shù)Random類.avi
03if簡介.avi
04循環(huán)簡介.avi
05猜數(shù)字小游戲代碼實現(xiàn).avi
01猜數(shù)字游戲需求
* A: 猜數(shù)字小游戲
* a: 分析完成功能所用的知識點
* 1:生成隨機數(shù)
* 2: if語句進行條件判斷
* 3: for循環(huán)結構
* B:超市購物小票
* a: 添加新的業(yè)務邏輯
02隨機數(shù)Random類
* A: Random類
* a: 功能
* 生成隨機數(shù)需要使用到引用類型隨機數(shù)Random類
* b: 使用方式
* import導包:所屬包java.util. Random
* 創(chuàng)建實例格式:Random random = new Random ();
* 調用方法
* nextInt(int maxValue) 產生[0,maxValue)范圍的隨機數(shù),包含0不包含maxValue
* nextDouble() 產生[0,1)范圍的隨機數(shù)
如:
Random random = new Random ();
int myNumber = random.nextInt(100);//結果為0-99的一個數(shù)
* B: 案例代碼
/*
引用數(shù)據(jù)類型:Random隨機數(shù)
java.util.Random
方法:
nextInt(int maxValue) 產生[0,maxValue)范圍的隨機數(shù)
nextDouble() 產生[0,1)范圍的隨機數(shù)
求1-100的隨機數(shù):random.nextInt(100)+1
附加題:求m到n的隨機數(shù)
*/
//導包
import java.util.Random;
public class Demo01Random {
public static void main(String[] args) {
//創(chuàng)建對象
Random random = new Random();
//調用方法
int randomNumber = random.nextInt(100)+1;
System.out.println(randomNumber);
double randomNumber2 = random.nextDouble();
System.out.println(randomNumber2);
}
}
03if簡介
* A: if條件判斷語句
* a: 方式一
* 1: 書寫格式
if(比較表達式) {
語句體;
}
* 2:執(zhí)行流程:
* 先計算比較表達式的值,看其返回值是true還是false。
* 如果是true,就執(zhí)行語句體;
* 如果是false吠式,就不執(zhí)行語句體陡厘;
* b: 方式二
* 1: 書寫格式
if(比較表達式) {
語句體1;
}else {
語句體2;
}
* 2:執(zhí)行流程:
* 首先計算比較表達式的值,看其返回值是true還是false特占。
* 如果是true糙置,就執(zhí)行語句體1;
* 如果是false是目,就執(zhí)行語句體2谤饭;
* c: 方式三
* 1: 書寫格式
if(比較表達式1) {
語句體1;
}else if(比較表達式2) {
語句體2;
}else if(比較表達式3) {
語句體3;
}
...
else {
語句體n+1;
}
* 2:執(zhí)行流程:
* 首先計算比較表達式1看其返回值是true還是false,
* 如果是true懊纳,就執(zhí)行語句體1揉抵,if語句結束。
* 如果是false嗤疯,接著計算比較表達式2看其返回值是true還是false冤今,
* 如果是true,就執(zhí)行語句體2茂缚,if語句結束辟汰。
* 如果是false,接著計算比較表達式3看其返回值是true還是false阱佛,
* 如果都是false,就執(zhí)行語句體n+1戴而。
* B: 案例代碼
/*
if語句:條件判斷語句
格式:滿足條件就執(zhí)行對應的語句
if(條件表達式){
執(zhí)行語句凑术;
}else if(條件表達式){
執(zhí)行語句;
}else {
執(zhí)行語句所意;
}
*/
import java.util.Random;
public class Demo02If{
//判斷小明的得分情況淮逊,如果是90-100分,就打印太棒了
//如果60-89分扶踊,就打印還不錯
//其他情況泄鹏,就打印 什么情況?~
public static void main(String[] args) {
//產生隨機分數(shù)
Random random = new Random();
int score = random.nextInt(101);
System.out.print(score);
//開始條件判斷
if(score>=90&&score<=100){
System.out.println("太棒了");
}else if(score>=60&&score<=89){
System.out.println("還不錯");
}else {
System.out.println("什么情況秧耗?备籽!");
}
}
}
04循環(huán)簡介
* A: 循環(huán)
* a: 需求:我們需要在用戶輸錯時,讓用戶再次輸入分井,讓用戶輸入的動作循環(huán)執(zhí)行车猬。這時需要使用到循環(huán)語句
* b: 分類
* for循環(huán)結構
* while循環(huán)結構
* do while循環(huán)結構
* c: 循環(huán)的重要組成部分
* 循環(huán)變量初始化 (初始化表達式)
* 循環(huán)出口(布爾表達式)
* 循環(huán)增量(步進表達式)
* 循環(huán)邏輯內容(循環(huán)體)
* B: for循環(huán)
* a: 書寫格式
for(初始化表達式①;布爾表達式②尺锚;步進表達式④){
循環(huán)體③
}
* b: 執(zhí)行順序
* ①②③④>②③④>②③④… ②不滿足為止珠闰。
* ①負責完成循環(huán)變量初始化
* ②負責判斷是否滿足循環(huán)條件,不滿足則跳出循環(huán)
* ③具體執(zhí)行的語句
* ④循環(huán)后瘫辩,循環(huán)條件所涉及變量的變化情況
* 舉例:
for(int i=0; i<10; i++) {
System.out.println(“我愛Java”+i);
}
//會從0-9輸出10次“我愛Java”
* C: 案例代碼
/*
循環(huán):
for/while/doWhile
循環(huán)滿足條件:
初始化表達式
布爾表達式
步進表達式
循環(huán)體
for(初始化表達式;布爾表達式;步進表達式){
循環(huán)體
}
初始化表達式執(zhí)行一次
布爾表達式 循環(huán)體 步進表達式 循環(huán)執(zhí)行 直到布爾表達式條件不滿足
break:直接跳出循環(huán)
*/
public class Demo03For {
public static void main(String[] args) {
//使用for循環(huán)伏嗜,循環(huán)10次
for(int i=0; i<10; i++){
//每次打印我愛java字符串并且打印當前次數(shù)
System.out.println("i love java坛悉!"+i);
//使用break關鍵字,在第六次打印結束后跳出循環(huán)
if(i == 5) {
break;
}
}
}
}
05猜數(shù)字小游戲代碼實現(xiàn)
* A: 猜數(shù)字小游戲
* a: 分析
* 用戶給的數(shù)可能大于承绸、小于裸影、或等于被猜的數(shù),這樣就會出現(xiàn)三種情況八酒,用前面講的三元運算符可以實現(xiàn)空民,
但是得用三元運算符的嵌套,比較麻煩羞迷!可以用更簡單的方式if條件判斷界轩,可以有三個以上的條件
* b: 需求分析
* 后臺預先生成一個隨機數(shù)1-100,用戶鍵盤錄入猜數(shù)字
* 如果猜對了衔瓮,打印“恭喜您浊猾,答對了”
* 如果猜錯了
* 猜大了:打印“sorry,您猜大了!”
* 猜小了:打印“sorry热鞍,您猜小了!”
直到數(shù)字猜到為止
最多只能猜5次葫慎,否則提示“sorry,您沒有機會了!”
* B: 案例代碼
/*
猜數(shù)字小游戲
完成猜數(shù)字小游戲:
1薇宠、產生隨機數(shù)
后臺預先生成一個隨機數(shù)1-100偷办,用戶鍵盤錄入猜數(shù)字
2、通過if語句對用戶猜的數(shù)與隨機數(shù)進行比較
如果猜對了澄港,打印“恭喜您椒涯,答對了”
如果猜錯了
猜大了:打印“sorry,您猜大了!”
猜小了:打印“sorry回梧,您猜小了!”
3废岂、通過for循環(huán)完成用戶猜數(shù)的循環(huán)
直到數(shù)字猜到為止
最多只能猜5次,否則提示“sorry狱意,您沒有機會了!”
*/
import java.util.Random;
import java.util.Scanner;
//通過*的方式可以一次導入該包下所有的類湖苞,但是不建議使用。建議使用哪個導哪個详囤。
//import java.util.*;
public class GuessNumber{
public static void main(String[] args) {
//1财骨、產生隨機數(shù)
//后臺預先生成一個隨機數(shù)1-100,用戶鍵盤錄入猜數(shù)字
//創(chuàng)建隨機數(shù)對象
Random random = new Random();
//產生一個1-100的隨機數(shù)
int randomNumber = random.nextInt(100)+1;
//System.out.println("我產生的隨機數(shù)是:"+randomNumber+"你猜猜是多少藏姐?"); 作弊專用
//產生控制臺錄入的Scanner對象
Scanner sc = new Scanner(System.in);
//3蚓再、通過for循環(huán)完成用戶猜數(shù)的循環(huán)
//通過for循環(huán)完成猜數(shù)字邏輯
for(int i=1; i<=5; i++){
//提示用戶輸入要猜的數(shù),用變量接收
System.out.println();
System.out.println("請您輸入一個1-100的數(shù):");
int guessNumber = sc.nextInt();
//2包各、通過if語句對用戶猜的數(shù)與隨機數(shù)進行比較
//如果猜對了
if(guessNumber==randomNumber) {
//打印猜對后的提示
System.out.println("恭喜您摘仅,猜對了!");
//跳出循環(huán)问畅,不用再猜了
break;
}else {//如果猜錯了
//如果猜大了
if(guessNumber>randomNumber) {
System.out.println("sorry娃属,您猜大了!");
}else {//如果猜小了
System.out.println("sorry六荒,您猜小了!");
}
}
//如果猜到了最后的第5次仍然沒有猜對就跳出循環(huán)
if(i==5) {
System.out.println("對不起,點太背矾端,下次再來吧掏击!");
break;
}
//每次猜錯后,都提示還有多少次機會
System.out.println("請注意秩铆,您還有"+(5-i)+"次機會砚亭,請慎重作答!");
}
}
}
======================================第一階段===========================================
06if介紹.avi
07for循環(huán)注意事項.avi
08while與dowhile循環(huán).avi
09break與continue.avi
06if介紹
* A: if語句詳細解釋
* a: 單條件判斷
* 1: 書寫格式
if(判斷條件){
執(zhí)行語句體殴玛;
}
* 滿足if條件即執(zhí)行捅膘,不滿足不執(zhí)行。如年齡大于18歲可以注冊婚戀網(wǎng)站
* 2:執(zhí)行流程:
* 先計算比較表達式的值滚粟,看其返回值是true還是false寻仗。
* 如果是true,就執(zhí)行語句體凡壤;
* 如果是false署尤,就不執(zhí)行語句體;
* b: 互斥條件判斷
* 1: 書寫格式
if(條件表達式){
執(zhí)行語句體1亚侠;
}else{
執(zhí)行語句體2曹体;
}
* 滿足條件執(zhí)行if語句體,不滿足執(zhí)行else語句體硝烂。如60分以上及格混坞,60分以下不及格,需要重考
* 2:執(zhí)行流程:
* 首先計算比較表達式的值钢坦,看其返回值是true還是false。
* 如果是true啥酱,就執(zhí)行語句體1爹凹;
* 如果是false,就執(zhí)行語句體2镶殷;
* c: 多條件判斷
* 1: 書寫格式
if(比較表達式1) {
語句體1;
}else if(比較表達式2) {
語句體2;
}else if(比較表達式3) {
語句體3;
}
...
else {
語句體n+1;
}
* 在多個條件中選擇滿足條件的if語句體執(zhí)行禾酱,如12月份對應四季
* 2:執(zhí)行流程:
* 首先計算比較表達式1看其返回值是true還是false,
* 如果是true绘趋,就執(zhí)行語句體1颤陶,if語句結束。
* 如果是false陷遮,接著計算比較表達式2看其返回值是true還是false滓走,
* 如果是true,就執(zhí)行語句體2帽馋,if語句結束搅方。
* 如果是false比吭,接著計算比較表達式3看其返回值是true還是false,
* 如果都是false姨涡,就執(zhí)行語句體n+1衩藤。
* d: 多層條件判斷(if語句的嵌套)
* 1: 書寫格式
if(比較表達式1){
if(比較表達式2){
語句體1;
}
}
if(比較表達式1){
if(比較表達式2){
語句體1涛漂;
} else {
語句體2赏表;
}
} else {
語句體3;
}
* 在復雜的業(yè)務邏輯中匈仗,可以使用多層的條件判斷代碼是否執(zhí)行瓢剿。如60分以下的同學不及格重考,60分以上的同學分優(yōu)秀锚沸、良好跋选、及格三個等級。
* 2:執(zhí)行流程:
* 首先計算比較表達式1看其返回值是true還是false哗蜈,
* 如果是false前标,就執(zhí)行語句體3
* 如果是true,接著計算比較表達式2看其返回值是true還是false距潘,
* 如果為true炼列,就執(zhí)行語句體1
* 如果為false,就執(zhí)行語句體2
* B: if語句注意事項
* a:當只有一條語句時音比,if或else后邊的{}可以省略
? * b: 多條件判斷區(qū)間一般不會重復
? * c:通過if與具體代碼塊限定了變量作用域俭尖,此例還可以進一步驗證java編譯時只檢查語法錯誤,不檢查變量值洞翩。
? * d: 三元運算符類似互斥條件判斷語句稽犁。不同處在于:三元運算符必然會產生一個數(shù)值,該值必須被使用骚亿。
而if語句可以產生數(shù)值已亥,也可以不產生,僅完成相應業(yè)務邏輯来屠,如打印語句虑椎。
* e:案例代碼
public class Demo02If
{
public static void main(String[] args)
{
int a = 10;
if(a==10) {
System.out.println(a);
int b = 20;
System.out.println(b);
}
//System.out.println(b);
boolean c = true;
int d;
if(c) {
System.out.println("測試代碼");
d = 100;
System.out.println(d);
}else {
d = 200;
}
System.out.println(d);
}
}
* C: 案例代碼
/*
if的詳細解釋:
單條件判斷,滿足執(zhí)行俱笛,不滿足不執(zhí)行
互斥條件判斷捆姜,if與else選擇一個執(zhí)行
多條件判斷
*/
import java.util.Random;
public class Demo04If{
public static void main(String[] args) {
//滿足18歲,注冊百合網(wǎng)
int age = 16;
if(age>=18) {
System.out.println("實名注冊迎膜,更放心泥技!百合網(wǎng)歡迎您!");
}
//滿足18歲磕仅,注冊百合網(wǎng)
if(age>=18) {
System.out.println("實名注冊零抬,更放心镊讼!百合網(wǎng)歡迎您!");
}else {
System.out.println("別著急平夜,以后機會很多蝶棋!");
}
System.out.println("=========================================");
//判斷小明的得分情況,
//如果90-100分忽妒,就打印太棒了
//如果80-89分玩裙,就打印還不錯
//如果60-79分,就打印過得去
//其他情況段直,就打印 什么情況吃溅?~
//產生隨機分數(shù)
Random random = new Random();
//int score = random.nextInt(101);
int score = 250;
System.out.print(score);
//開始條件判斷
if(score>=90&&score<=100){
System.out.println("太棒了");
}else if(score>=80&&score<=89){
System.out.println("還不錯");
}else if(score>=60&&score<=79){
System.out.println("過得去");
}else if(score>=0&&score<=59){
System.out.println("什么情況?鸯檬!");
}else {
System.out.println("你要上天啊决侈,這分也敢改!");
}
}
}
07for循環(huán)注意事項
* A: for循環(huán)注意事項
* a: for循環(huán)格式
for(初始化表達式①喧务;布爾表達式②赖歌;步進表達式④){
循環(huán)體③
}
執(zhí)行順序: ①②③④>②③④>②③④… ②不滿足為止。
①負責完成循環(huán)變量初始化
②負責判斷是否滿足循環(huán)條件功茴,不滿足則跳出循環(huán)
③具體執(zhí)行的語句
④循環(huán)后庐冯,循環(huán)條件所涉及變量的變化情況
* b: 注意事項
* 1:①②③④四個部分均可以為空
* 當①為空時,注意變量作用域的范圍變化
* 當②為空時坎穿,為條件永遠為true的死循環(huán)
* 當③為空時展父,通常沒有意義
* 當④為空時,可以將其加入到循環(huán)體中玲昧,或同樣成為死循環(huán)
* 2:初始化表達式①的部分可以同時定義多個變量栖茉,步進表達式可以同時將多個循環(huán)相關變量改變,控制循環(huán)條件
* B: 案例代碼
public class Demo05For{
public static void main(String[] args) {
//初始化表達式可為空
int i=0;
for(; i<10; i++){
System.out.println("我愛java"+i);
}
System.out.println(i);
System.out.println("===============================");
//布爾表達式可為空孵延,但是循環(huán)將變?yōu)樗姥h(huán)吕漂,無法跳出循環(huán)
//for(int j=0; ; j++){
// System.out.println("我愛java"+j);
//}
//步進表達式可為空,但是通常會轉移到循環(huán)體最后
for(int k=0; k<10; ){
System.out.println("我愛java"+k);
k++;
}
//初始化表達式隙袁、步進表達式軍可以同時操作多個變量
for(int k=0,m=0; k<10; k++,m+=2){
System.out.println(m+"我愛java"+k);
}
}
}
08while與dowhile循環(huán)
* A: while循環(huán)結構
* a: 使用格式
初始化表達式①
while(布爾表達式②){
循環(huán)體③
步進表達式④
}
* b: 執(zhí)行順序
①②③④>②③④>②③④… ②不滿足為止。
①負責完成循環(huán)變量初始化弃榨。
②負責判斷是否滿足循環(huán)條件菩收,不滿足則跳出循環(huán)。
③具體執(zhí)行的語句鲸睛。
④循環(huán)后娜饵,循環(huán)變量的變化情況。
* c: 注意事項
與for循環(huán)的循環(huán)變量作用域不同官辈,for循環(huán)的循環(huán)變量其作用域僅限于循環(huán)體內箱舞,
而while循環(huán)的循環(huán)變量作用域不局限在循環(huán)體內遍坟。
與for循環(huán)的循環(huán)條件為空是是死循環(huán)不同,while循環(huán)的循環(huán)條件不能為空
* B: do-while循環(huán)結構
* a: 使用格式
初始化表達式①
do{
循環(huán)體③
步進表達式④
}while(布爾表達式②);
* b: 執(zhí)行順序
①③④>②③④>②③④… ②不滿足為止晴股。
①負責完成循環(huán)變量初始化愿伴。
②負責判斷是否滿足循環(huán)條件,不滿足則跳出循環(huán)电湘。
③具體執(zhí)行的語句
④循環(huán)后隔节,循環(huán)變量的變化情況
* c: 注意事項
do while循環(huán)的使用特點為無論是否滿足條件,均至少會執(zhí)行一次寂呛。
* C: 案例代碼
public class Demo06While_Dowhile{
public static void main(String[] args) {
int i=1;
while(i<10){
System.out.println("i love baby!"+i);
i++;
}
int j=1;
do{
System.out.println("i love baby!"+j);
j++;
}while(j<10);
}
}
09break與continue
* A: break語句
* a: 作用
* 跳出所在的循環(huán)體
* b: 書寫位置
* 必須出現(xiàn)在循環(huán)或選擇結構內
* c: 舉例
for(int i=0; i<10; i++) {
if(i>5) {
break;
}
System.out.println(“我愛Java”+i);
}
//會從0-5輸出6次“我愛Java”
* d: 案例代碼
public class Demo04Break
{
public static void main(String[] args)
{
/*
打印10次i love java
*/
for(int i = 0; i<10; i++) {
System.out.println("i love java!"+i);
if(i==8) {
break;
}
}
System.out.println("我已真愛怎诫!");
}
}
* B: break詳細解釋
* a: 作用
* 在loop/switch選擇或者循環(huán)過程中,我們總是滿足布爾表達條件才能執(zhí)行對應的代碼贷痪,然而在這些邏輯過程中幻妓,
可以使用一些關鍵字直接跳出正在執(zhí)行的代碼,去執(zhí)行后邊或者指定位置的代碼劫拢,
這些關鍵字一旦出現(xiàn)就可以跳轉語句執(zhí)行順序肉津。
* b: 使用方式
* 無法單獨使用,必須將break關鍵字置于switch或循環(huán)語句中
* c: 運行規(guī)律
* 不需要判斷任何條件尚镰,只要遇到break變直接跳出執(zhí)行后續(xù)代碼阀圾。會完全跳出選擇或者循環(huán)結構
* 只能跳出最近的代碼塊,不能跨越多級代碼塊
* d: 案例代碼
public class Demo07Break{
public static void main(String[] args) {
/*
xiaoY:
for(int j=0;j<5;j++){
//使用for循環(huán)狗唉,循環(huán)10次
for(int i=0; i<10; i++){
//每次打印我愛java字符串并且打印當前次數(shù)
System.out.println(j+"i love java初烘!"+i);
//使用break關鍵字,在第六次打印結束后跳出循環(huán)
if(i == 5) {
break xiaoY;
}
}
}
*/
xiaoY:
for(int j=0;j<5;j++){
//使用for循環(huán)分俯,循環(huán)10次
for(int i=0; i<10; i++){
//使用break關鍵字肾筐,在第六次打印結束后跳出循環(huán)
if(i == 5) {
//break xiaoY;
//continue;
continue xiaoY;
}
//每次打印我愛java字符串并且打印當前次數(shù)
System.out.println(j+"i love java!"+i);
//System.out.println("i love java缸剪!"+i);
}
}
}
}
* C:循環(huán)標號
* a: 為什么使用循環(huán)標號
* 當在雙層循環(huán)或者循環(huán)內有switch選擇語句時吗铐,我們發(fā)現(xiàn),使用break或者continue所作用的對象均是內層語句杏节,
無法直接跳出外層循環(huán)唬渗,這時就需要使用標號語句跳轉了
* b: 使用方式
* 在外層循環(huán)外的某行前邊,使用后邊跟有冒號”:”的標識符奋渔,即定義完畢镊逝。
使用時當在內層循環(huán)使用break或continue時后邊緊跟之前定義的標號即可
* c: 運行規(guī)律
* 當外層循環(huán)外定義了標號
內層使用break,終止內外雙層循環(huán)嫉鲸。
內層使用continue撑蒜,終止內層循環(huán),繼續(xù)外層循環(huán)。
* d: 案例代碼
public class Demo09Break3
{
public static void main(String[] args)
{
out:
for(int i=0; i<10; i++) {
for(int j=0; j<5; j++) {
System.out.println("i:"+i+" j:"+j);
if(j==2){
//break out;
continue out;
}
}
}
}
}
* D: continue介紹
* a: 作用
* 提前結束本次循環(huán)座菠,繼續(xù)進行下次循環(huán)
* b: 使用方式
* 無法單獨使用狸眼,必須將continue關鍵字置于循環(huán)語句中
* c:運行規(guī)律
* 不需要判斷任何條件,只要遇到continue變直接跳出本輪循環(huán)進行下次循環(huán)
* d:舉例
for(int i=0; i<10; i++) {
if(i==5) {
continue;
}
System.out.println(“我愛Java”+i);
}
//會從0-4浴滴、6-9輸出9次“我愛Java”
* e: 案例代碼
public class Demo08Continue
{
public static void main(String[] args)
{
for(int i=0; i<10; i++) {
if(i==5) {
continue;
}
System.out.println("我愛Java"+i);
}
}
}
============================第二階段=======================================
10小票追加需求.avi
11switch.avi
12小票追加需求重構代碼分析.avi
13if重構三元運算符代碼.avi
14打折邏輯實現(xiàn).avi
15選擇與循環(huán)購物實現(xiàn).avi
16購物小票追加需求案例代碼總結.avi
10小票追加需求
* A: 購物小票添加需求
* a: 新的打折需求(判斷結果并重新為變量賦值)
* 如果商品總價超過300元拓萌,打95折
* 如果商品總價超過600元,打9折
* 如果商品總價超過1000元巡莹,打8折
* 如果商品總價超過1000元司志,并且少林寺酥餅核桃購買超過30份, 則總價打8折后,立減20
* b: 操作字符串數(shù)據(jù)
* 如果商品名稱超過7個字降宅,則截取前7個字加…完成小票商品名
* c: 使用戶操作輸入數(shù)據(jù)后可重新購買
* 1: 代表開始購物骂远,每次運行購買次數(shù)不得超過3次,否則直接打印小票
* 2: 代表結賬(打印小票)
* 3: 代表不想買了腰根,直接退出
11switch
* A: switch簡介
* a: 需求分析
* 上面的新增需求中激才,根據(jù)用戶的不同選擇,完成不同的操作購買额嘿、結賬瘸恼、退出,這樣的話册养,就需要用switch來完成
* b: 使用格式
* 根據(jù)一個變量值东帅,對比多個可選值,當變量值匹配到對應可選值時球拦,執(zhí)行該值對應的語句
* c: switch注意事項
* 變量可選擇的類型一共六種:byte,short,int,char,String(JDK1.7后),枚舉(JDK1.5后)
? * 如同if語句當中的else靠闭,default不是必須存在的
? * break用來跳出選擇結構,沒有break語句則在某種情況執(zhí)行后坎炼,會忽略剩余case關鍵字愧膀,順序繼續(xù)執(zhí)行剩余代碼
? * 與if語句不同,switch語句只能完成具體值的選擇谣光,而不能指定取值區(qū)間
* B: 案例代碼
/*
選擇結構switch:從幾個具體的值當中選擇一個檩淋,執(zhí)行對應值后邊的代碼
格式:如代碼
會在第一次執(zhí)行switch時,對比變量與給定的值是否匹配萄金,匹配后蟀悦,執(zhí)行對應給定值后邊代碼。
只進行一次匹配氧敢,在第一次匹配后日戈,忽略所有的case
break可以省略,省略后會直接執(zhí)行后續(xù)代碼
所有的case沒有順序限制
*/
public class Demo08Switch{
public static void main(String[] args) {
//根據(jù)不同的數(shù)字福稳,打印不同的星期 1-7 一~日
int number = 3;
switch(number){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 4:
System.out.println("星期四");
break;
case 3:
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.println("您輸入的星期有誤涎拉!");
break;
}
}
}
12小票追加需求重構代碼分析
* A: 小票追加需求重構代碼分析
* a: 需求分析
? * 使用前兩天內容完成購物小票的基本內容。
? * 判斷結果并重新為變量賦值均是對總價進行不同條件的判斷與賦值
? * 字符串獲取長度并截取字符串判斷的圆,這里使用if語句替代三元運算符,更為靈活越妈。
? * 使用戶操作輸入數(shù)據(jù)后可重新判斷是否重新購買時季俩,使用循環(huán)語句完成,而在此過程中梅掠,我們依據(jù)用戶輸入的1酌住、2、3的過程可是使用switch語句完成阎抒。
* b: 代碼重構
* 用更好的方式酪我,將之前寫好的代碼重新寫一遍,加入新的需求
* c:根據(jù)需求在原有代碼上分析應該添加代碼的地方且叁,標注為TODO的地方為要添加代碼的地方
/*
超市管理系統(tǒng)
基本小票完成后加入業(yè)務邏輯:
判斷結果并重新為變量賦值
如果商品總價超過300元都哭,打95折
如果商品總價超過600元,打9折
如果商品總價超過1000元逞带,總價打8折
如果商品總價超過1000元欺矫,并且少林寺酥餅核桃購買超過30份, 則總價打8折后,立減20
操作字符串數(shù)據(jù)
如果商品名稱超過7個字展氓,則截取前7個字加…完成小票商品名
使用戶操作輸入數(shù)據(jù)后可重新購買:
1代表開始購物 (用戶輸入數(shù)量的過程)
2代表結賬(打印小票) (打印小票 票頭穆趴,票體,票腳)
3代表不想買了遇汞,直接退出 (break跳出選擇)
一次完整的購物邏輯:
直接退出
購買后...退出
購買后...結賬
隱藏:
將所有代碼放到循環(huán)中未妹,使多個人可以重復購買
讓一個用戶,反復購買勺疼,之后結賬或退出購買
*/
import java.util.Scanner;
public class Supermarket {
public static void main(String[] args) {
//通過變量打印商品報價單
//定義每個商品的變量
String slsName = "少林寺酥餅核桃"; //名稱
String slsID = "090115"; //編號
double slsPrice = 15.5; //單價
String slsUnit = "個"; //單位
int slsNumber; //數(shù)量
double slsMoney; //金額
String skName = "皇家特供尚康雜糧牡丹餅(復合營養(yǎng)型)";
String skID = "090027";
double skPrice = 14.5;
String skUnit = "個";
int skNumber;
double skMoney;
System.out.println(" 歡迎光臨");
System.out.println();
System.out.println("商品編號 商品名稱 商品單價 商品計價單位");
System.out.println(slsID+" "+slsName+" "+slsPrice+" "+slsUnit);
System.out.println(skID+" "+skName+" "+skPrice+" "+skUnit);
//讓用戶輸入每種貨物的購買數(shù)量
//創(chuàng)建Scanner對象教寂,調用nextInt方法
Scanner sc = new Scanner(System.in);
//提示用戶輸入
System.out.println();
System.out.println("請輸入您要購買的"+slsName+"數(shù)量:");
//使用用戶輸入的數(shù)量為已有的數(shù)量變量賦值
slsNumber = sc.nextInt();
slsMoney = slsPrice * slsNumber;
System.out.println("請輸入您要購買的"+skName+"數(shù)量:");
//使用用戶輸入的數(shù)量為已有的數(shù)量變量賦值
skNumber = sc.nextInt();
skMoney = skPrice * skNumber;
//打印購物小票
//票頭
//直接字符串常量打印
System.out.println(" 歡 迎 光 臨 ");
System.out.println(" 品名 售價 數(shù)量 金額");
System.out.println("-------------------------------------------------------");
//票體
//如果商品名稱超過7個字,就截取前7個字+...
//TODO 使用if替換掉三元運算符號的實現(xiàn)
int slsNameLenght = slsName.length();
slsName = slsNameLenght>7 ? slsName.substring(0,7)+"...":slsName;
int skNameLenght = skName.length();
skName = skNameLenght>7 ? skName.substring(0,7)+"...":skName;
System.out.println(slsName+"("+slsID+") "+slsPrice+" * "+slsNumber+" = "+slsMoney);
System.out.println(skName+"("+skID+") "+skPrice+" * "+skNumber+" = "+skMoney);
System.out.println("-------------------------------------------------------");
//票腳
//計算匯總的變量
int totalItemsNumber = 2; //商品項數(shù)
int totalNumber = slsNumber+skNumber; //商品件數(shù)
double totalMoney = slsMoney+skMoney; //商品總金額
//判斷總金額和少林寺兩種數(shù)據(jù)是否滿足打折條件执庐,滿足就打折
//TODO 打折
double afterTotalMoney = (totalMoney >= 1000&&slsNumber>=30) ? totalMoney*0.9:totalMoney;
System.out.println(totalItemsNumber+"項商品 共計:"+totalNumber+"件");
//在打印總金額時酪耕,超市顯示四舍五入后的整數(shù),不包含小數(shù)點轨淌,需要用到Math類四舍五入方法迂烁,及強制類型轉換
afterTotalMoney = Math.round(afterTotalMoney);
System.out.println("總計:"+(int)afterTotalMoney+"元");
System.out.println("您真的太幸運了,本次打折活動為您節(jié)省了"+(totalMoney-(int)afterTotalMoney));
System.out.println("憑此小票換取發(fā)票");
}
}
13if重構三元運算符代碼
* A: if重構三元運算符代碼
* a: 將"###12小票追加需求重構代碼分析"中案例代碼中的"http://TODO 使用if替換掉三元運算符號的實現(xiàn)"位置后面的以下代碼:
int slsNameLenght = slsName.length();
slsName = slsNameLenght>7 ? slsName.substring(0,7)+"...":slsName;
int skNameLenght = skName.length();
skName = skNameLenght>7 ? skName.substring(0,7)+"...":skName;
替換為:
if(slsName.length() > 7) {
//截取前7個字递鹉,連接...賦值給slsName
slsName = slsName.substring(0,7) + "...";
}
if(skName.length() > 7) {
//截取前7個字盟步,連接...賦值給skName
skName = skName.substring(0,7) + "...";
}
14打折邏輯實現(xiàn)
* A: 打折邏輯實現(xiàn)
* a: 將"###12小票追加需求重構代碼分析"中案例代碼中的"http://TODO 打折邏輯"位置后面的以下代碼:
double afterTotalMoney = (totalMoney >= 1000&&slsNumber>=30) ? totalMoney*0.9:totalMoney;
替換為:
//判斷總金額和少林寺兩種數(shù)據(jù)是否滿足打折條件,滿足就打折
/*
如果商品總價超過300元躏结,打95折
如果商品總價超過600元却盘,打9折
如果商品總價超過1000元,總價打8折
如果商品總價超過1000元,并且少林寺酥餅核桃購買超過30份, 則總價打8折后黄橘,立減20
*/
double afterTotalMoney = totalMoney;
//滿300打95折
if(totalMoney>=300&&totalMoney<600) {
afterTotalMoney = totalMoney*0.95;
}else if(totalMoney>=600&&totalMoney<1000) {//滿600打9折
afterTotalMoney = totalMoney*0.9;
}else if(totalMoney>=1000) {//滿1000打8折
afterTotalMoney = totalMoney*0.8;
}
//滿1000且少林寺超過30兆览,打8折再立減20
if(totalMoney>=1000&&slsNumber>=30) {
afterTotalMoney = totalMoney*0.8-20;
}
15選擇與循環(huán)購物實現(xiàn)
* A: 超市購物小票新增需求分析
* a: 確定循環(huán)位置
* 用戶操作輸入數(shù)據(jù)過程為修改變量的過程,而不是定義變量的過程塞关。
所以抬探,所有定義變量的動作均可以定義在循環(huán)之前。
* b: 循環(huán)條件
* 用戶打印小票或者不再購買時跳出帆赢。(一次完整的購物邏輯)
* c: 循環(huán)體內容
* 循環(huán)體內包含內容為一個switch選擇小压,根據(jù)用戶選擇結果鳖悠,完成不同的操作邏輯骇笔。
* 購物邏輯:為變量賦值弛姜,計算次數(shù)
* 打印小票邏輯:打印小票常量內容與變量值旋炒,一次購物完成
* 跳出邏輯:跳出循環(huán)反砌,一次購物完成
* 用戶輸入錯誤邏輯:重新輸入購物清單蛔六,計算次數(shù)
* B: 選擇與循環(huán)購物實現(xiàn)
/*
加入了
通過用戶輸入的不同數(shù)字费奸,判斷用戶的操作
使用for循環(huán)的方式完成一個用戶一次完整的購買動作
使用switch語句包雀,完成用戶的不同操作
1:購買: 購買完畢后跳出switch憋他,讓用戶選擇其他操作
2:付賬: 付賬完畢后孩饼,一次購買完畢,跳出循環(huán)(完成一次完整的購買動作)
3:退出: 選擇退出后竹挡,一次購買完畢镀娶,跳出循環(huán)(完成一次完整的購買動作)
的購物小票
*/
* a: 案例代碼(實現(xiàn)了今天新加的所有需求)
import java.util.Scanner;
public class Supermarket {
public static void main(String[] args) {
//通過變量打印商品報價單
//定義每個商品的變量
String slsName = "少林寺酥餅核桃"; //名稱
String slsID = "090115"; //編號
double slsPrice = 15.5; //單價
String slsUnit = "個"; //單位
int slsNumber = 0; //數(shù)量
double slsMoney = 0; //金額
String skName = "皇家特供尚康雜糧牡丹餅(復合營養(yǎng)型)";
String skID = "090027";
double skPrice = 14.5;
String skUnit = "個";
int skNumber = 0;
double skMoney = 0;
//創(chuàng)建Scanner對象,調用nextInt方法
Scanner sc = new Scanner(System.in);
//將用戶的一次操作放到循環(huán)中循環(huán)執(zhí)行
while(true) {
//通過switch完成一次完整的購物動作:
/*
1代表開始購物 (用戶輸入數(shù)量的過程)
2代表結賬(打印小票) (打印小票 票頭揪罕,票體梯码,票腳)
3代表不想買了,直接退出 (break跳出選擇)
*/
//用戶輸入要做的動作代碼
System.out.println();
System.out.println("歡迎光臨好啰!");
System.out.println("請選擇您的操作:1代表開始購物轩娶、2代表結賬(打印小票)、3直接退出");
int choose = sc.nextInt();
switch(choose) {
case 1: //購物框往,就是為數(shù)量變量賦值
//打印商品報價單
System.out.println(" 歡迎光臨");
System.out.println();
System.out.println("商品編號 商品名稱 商品單價 商品計價單位");
System.out.println(slsID+" "+slsName+" "+slsPrice+" "+slsUnit);
System.out.println(skID+" "+skName+" "+skPrice+" "+skUnit);
//讓用戶輸入每種貨物的購買數(shù)量
//提示用戶輸入
System.out.println();
System.out.println("請輸入您要購買的"+slsName+"數(shù)量:");
//使用用戶輸入的數(shù)量為已有的數(shù)量變量賦值
slsNumber = sc.nextInt();
slsMoney = slsPrice * slsNumber;
System.out.println("請輸入您要購買的"+skName+"數(shù)量:");
//使用用戶輸入的數(shù)量為已有的數(shù)量變量賦值
skNumber = sc.nextInt();
skMoney = skPrice * skNumber;
break;
case 2://打印購物小票
//票頭
//直接字符串常量打印
System.out.println(" 歡 迎 光 臨 ");
System.out.println(" 品名 售價 數(shù)量 金額");
System.out.println("-------------------------------------------------------");
//票體
//如果商品名稱超過7個字鳄抒,就截取前7個字+...
//使用if替換掉三元運算符的實現(xiàn)
//slsName的名字是否超過了7個字
if(slsName.length() > 7) {
//截取前7個字,連接...賦值給slsName
slsName = slsName.substring(0,7) + "...";
}
if(skName.length() > 7) {
//截取前7個字椰弊,連接...賦值給skName
skName = skName.substring(0,7) + "...";
}
System.out.println(slsName+"("+slsID+") "+slsPrice+" * "+slsNumber+" = "+slsMoney);
System.out.println(skName+"("+skID+") "+skPrice+" * "+skNumber+" = "+skMoney);
System.out.println("-------------------------------------------------------");
//票腳
//計算匯總的變量
int totalItemsNumber = 2; //商品項數(shù)
int totalNumber = slsNumber+skNumber; //商品件數(shù)
double totalMoney = slsMoney+skMoney; //商品總金額
//判斷總金額和少林寺兩種數(shù)據(jù)是否滿足打折條件许溅,滿足就打折
/*
如果商品總價超過300元,打95折
如果商品總價超過600元秉版,打9折
如果商品總價超過1000元贤重,總價打8折
如果商品總價超過1000元,并且少林寺酥餅核桃購買超過30份, 則總價打8折后清焕,立減20
*/
double afterTotalMoney = totalMoney;
//滿300打95折
if(totalMoney>=300&&totalMoney<600) {
afterTotalMoney = totalMoney*0.95;
}else if(totalMoney>=600&&totalMoney<1000) {//滿600打9折
afterTotalMoney = totalMoney*0.9;
}else if(totalMoney>=1000) {//滿1000打8折
afterTotalMoney = totalMoney*0.8;
}
//滿1000且少林寺超過30并蝗,打8折再立減20
if(totalMoney>=1000&&slsNumber>=30) {
afterTotalMoney = totalMoney*0.8-20;
}
System.out.println(totalItemsNumber+"項商品 共計:"+totalNumber+"件");
//在打印總金額時祭犯,超市顯示四舍五入后的整數(shù),不包含小數(shù)點滚停,需要用到Math類四舍五入方法盹憎,及強制類型轉換
afterTotalMoney = Math.round(afterTotalMoney);
System.out.println("總計:"+(int)afterTotalMoney+"元");
System.out.println("您真的太幸運了,本次打折活動為您節(jié)省了"+(totalMoney-(int)afterTotalMoney));
System.out.println("憑此小票換取發(fā)票");
//每次結賬后铐刘,將數(shù)據(jù)重置
slsNumber = 0;
slsMoney = 0;
skNumber = 0;
skMoney = 0;
break;
case 3:
System.out.println("歡迎下次帶著錢來光臨!");
//每次退出后影晓,將數(shù)據(jù)重置
slsNumber = 0;
slsMoney = 0;
skNumber = 0;
skMoney = 0;
break;
default:
System.out.println("您輸入的選擇有誤镰吵,請重新輸入");
}
}
}
}
16購物小票追加需求案例代碼總結
* A: 購物小票追加需求案例代碼總結
* a: 分析今天水果超市案例的代碼流程
day03.17_總結
- 把今天的知識點總結一遍。