1. 程式人生 > 實用技巧 >Java時間膠囊-Java基本語法(2)(Scanner和流程控制(2))

Java時間膠囊-Java基本語法(2)(Scanner和流程控制(2))

Java時間膠囊-Java基本語法(2)(Scanner和流程控制(2))

Scanner(控制檯輸入)
  • 匯入包:import java.util.Scanner;
  • 例項化:Scanner input = new Scanner(System.in);
  • 呼叫Scanner類的相關方法 獲取指定型別的變數(int-->nextInt()... .. .)(String-->next()/nextLine())(獲取何種型別 next(型別)())(無char型別 因為有String型別)
  • String中提供了一個方法 xxx.charAt(int index);(獲取索引處的字元)
流程控制-分支結構
  • if-else(選一 無論多少分支 都是多選一)(分支結構中的條件判斷結構)
  • switch-case
if-else
  • else結構是可選的
  • 針對於條件表示式是:
    1. 如果多個條件表示式之間是“互斥”關係(或者沒有交集的關係)那個判斷和執行語句宣告在上面還是下面 無所謂
    1. 如果多個條件表示式之間有交集關係 需要根據實際情況 考慮清楚應該將那個結構宣告在上面
    1. 如果多個條件表示式之間有包含關係 通常情況下 需要將範圍小的宣告在範圍大的上面 否則範圍小的可能不會執行
    1. if-執行後只有單行可取消“{}”(可能後續修改程式會出錯 謹慎使用)省去“{}”後if-的程式碼域只有單行 且else配對-if(尋找路線是就近原則)
      遇見試題需要謹慎... .. .
    1. 多重if語句 在條件1不滿足的情況下 才會進行條件2的判斷 當前面的條件均不成立時 才會執行else塊內的程式碼

三個數字從小到大排列(氣泡排序解析)
... .. .

三個數字從小到大排列(if-else)
... .. .
(開發中不會使用 開發中很少見到三層以上 不斷分支會引起思維混亂)

==和equals的區別

  • ==比較的是例項變數 常量 物件的引用等
  • equals比較的是引用的具體例項物件
隨機數生成(random)

Math.random()

  • 返回型別是double型別(>=0.0)(<1.0)總的來說[0.0,1.0)
// 隨機數的生成
//double value = Math.random() * 100;// 這樣是[0.0,100.0)
//double value = Math.random() * 90 + 10;// [10.0,100.0)
// 公式:[a,b]:(<u>int</u>)(Math.random() * (b - a + 1) + a);
double <u>value</u> = (int)Math.random() * 90 + 10;// [10,99]
switch-case
  • switch-case 它是一個入口 根據switch()表示式的值 依次匹配各個case中的常量 一旦匹配成功 則進入相應的case結構中 呼叫其執行語句 當執行完呼叫的語句後 則仍然向下執行其他case結構中的執行語句 直到遇見break關鍵字或此switch-case結構的末尾結束為止
  • break可以使用在switch-case結構中 表示一但執行到此關鍵字 就跳出switch-case結構
  • switch結構中的表示式"switch(... .. .)" 只能是如下六種資料型別之一
    (byte char short int 列舉型別(JDK5.0新增) String(JDK7.0新增))(這是規定... .. .)
  • case之後只能宣告常量 不能聲明範圍
  • default(預設值)(case之外(情況之外))

判斷輸入日期是2020年的第多少天

/*
 * 編寫程式 輸入日期 判斷是2020年的第幾天
 * 日期 判斷所輸入月份當月的天數
 * 月份 判斷除當月後 有幾個月
 * 利用switch語句進行編寫程式碼
 * 
 * */
System.out.println("請輸入月份!");
int month = input.nextInt();
System.out.println("請輸入日期!");
int day = input.nextInt();
int sumDay = 0;
switch (month) {
case 12:
sumDay += 30;
case 11:
sumDay += 31;
case 10:
sumDay += 30;
case 9:
sumDay += 31;
case 8:
sumDay += 31;
case 7:
sumDay += 30;
case 6:
sumDay += 31;
case 5:
sumDay += 30;
case 4:
sumDay += 31;
case 3:
sumDay += 30;
case 2:
sumDay += 31;
case 1:
sumDay += day;
}
System.out.println("2020年" + month + "月" + day + "日\t" + "是2020年的第" + sumDay + "天!" );
  • 凡是可以使用switch-case結構 都可以轉換if-else 反之不成立
  • 我們寫分支結構時 當發現即可使用switch-case結構又能使用if-else擠乳溝 我們優先使用switch-case(當然 case不能太多... .. .)原因是swtich-case執行效率更高
迴圈結構

(最近發現了一個問題 無論遇見什麼樣的問題 不要直接莽 要思考問題的抽象 思考問題的實現邏輯 要養成程式設計思想)
(在某些條件滿足的情況下 反覆執行)

  • for迴圈
  • while迴圈
  • do-while迴圈
for迴圈
graph TD A[初始化部分] -->|進入條件判斷| B{迴圈條件} B -->|true| C[迴圈體部分] C --> D[迭代部分] D -->|重新進入迴圈條件判斷| B[迴圈條件] B -->|false| E[跳出for迴圈 執行其他語句]

for迴圈的4個要素

  • 1.初始化條件(只執行在初始執行單次)
  • 2.迴圈條件 ---> boolean
  • 3.迴圈體
  • 4.迭代條件
int num = 1;
for (System.out.print('a'); num <= 3; System.out.print('c'), 
num++) {
/*
 * System.out.println('a');初始化條件
 * <u>num</u> <= 3;迴圈條件
 * System.out.println('c'), <u>num</u>++; 迭代條件
 * 
 * */
System.out.print('b');
} // <u>abc</u> <u>bc</u> <u>bc</u>

for迴圈的執行條件
1-->2(ture)-->3-->4 -->2(ture)-->3-->4 ... .. . -->2(false)

三元運算子 switch-case if-else使用的優先順序

  • 三元運算子和switch-case都能轉換為if-else 反之則不成立(因為有能改成有不能改成的)
  • 優先順序:三元運算子---switch-case---if-else(因為三元運算子(簡單語句使用)和switch-case執行效率高)