JavaSE筆記03流程控制
阿新 • • 發佈:2020-10-20
Java流程控制
1.順序結構
- java的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句往下執行。
- 順序結構是最簡單的演算法結構,它是任何一個演算法都離不開的一種基本演算法結構。
2. 選擇結構
1.if單選結構
語法:
if(布林表示式){
//如果布林表示式為true將執行的語句
}
小例子
Scanner scanner = new Scanner(System.in); System.out.println("請輸入內容:"); String s = scanner.nextLine(); //equals:判斷字串是否相等 if (s.equals("Hello")){ System.out.println(s); } System.out.println("End"); scanner.close();
2.if雙選結構
語法
if(布林表示式){
//如果布林表示式的值為true
}else{
//如果布林表示式的值為false
}
小例子
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入成績:");
int score = scanner.nextInt();
if (score >= 60){
System.out.println("及格");
}else {
System.out.println("不及格");
}
scanner.close();
3.if多選結構
語法
if(布林表示式1){
//如果布林表示式1的值為true執行程式碼
}else if(布林表示式2){
//如果布林表示式2的值為true執行程式碼
}else if(布林表示式3){
//如果布林表示式3的值為true執行程式碼
}else{
//如果以上布林表示式都不為true執行程式碼
}
小例子
Scanner scanner = new Scanner(System.in); System.out.println("請輸入成績:"); int score = scanner.nextInt(); /* if語句至多有1個else語句,else語句在所有的 else if 語句之前 if語句可以有若干個 else if 語句,它們必須在 else 語句之前 一旦其中一個else if 語句檢測為true,其他的else if 以及 else 語句都將跳過執行 */ if (score == 100){ System.out.println("恭喜滿分"); }else if (score < 100 && score >= 90){ System.out.println("A級"); }else if (score < 90 && score >= 80){ System.out.println("B級"); }else if (score < 80 && score >= 70){ System.out.println("C級"); }else if (score < 70 && score >= 60){ System.out.println("D級"); }else if (score < 60 && score >= 0){ System.out.println("不及格!"); } else { System.out.println("成績不合法"); } scanner.close();
4.巢狀的if結構
語法
if(布林表示式1){
//如果布林表示式1的值為true執行程式碼
if(布林表示式2){
//如果布林表示式2的值為true執行程式碼
}
}
5.switch多選擇結構
語法
switch(expression){
case value:
//語句
break;//可選
case value:
//語句
break;
//可以有任意數量的case語句
default :
//語句
}
小例子
//switch匹配一個具體的值
char grade = 'C';
switch (grade){
case 'A':
System.out.println("優秀");
break;//可選
//若沒有break,會發生case穿透現象
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("及格");
break;
case 'D':
System.out.println("再接再厲");
break;
case 'E':
System.out.println("掛科");
break;
default:
System.out.println("未知等級");
}
從Java SE 7開始,switch支援字串String型別了,同時case標籤必須為字串常量或字面量
package com.kuang.Struch;
public class SwitchDemo02 {
public static void main(String[] args) {
String name = "娑娜";
//JDk7的新特性,表示式結果是字串
//字型的本質還是數字
switch (name){
case "娑娜" :
System.out.println("大大大!");
break;
case "金克斯":
System.out.println("一馬平川~");
break;
default:
System.out.println("......");
}
}
}
1.IDEA反編譯
反編譯 java--->class(位元組碼檔案)------反編譯(IDEA自帶可以實現)
- 點選File--->選擇Project Structure...彈出一個視窗
- 選擇Project,往下看到Project complier output,有個檔案的地址,按地址找到檔案的.class檔案,拖進idea裡去會提示是否要反編譯,點確認就行了
2.反編譯後效果:
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
package com.kuang.Struch;
public class SwitchDemo02 {
public SwitchDemo02() {
}
public static void main(String[] args) {
String name = "娑娜";
byte var3 = -1;
switch(name.hashCode()) {
case 737835:
if (name.equals("娑娜")) {
var3 = 0;
}
break;
case 36544341:
if (name.equals("金克斯")) {
var3 = 1;
}
}
switch(var3) {
case 0:
System.out.println("大大大!");
break;
case 1:
System.out.println("一馬平川~");
break;
default:
System.out.println("......");
}
}
}
3.迴圈結構
1.while迴圈
//語法
while(布林表示式){
//迴圈內容
}
//只要布林表示式為true,迴圈就會一直執行下去
//我們大多數情況下是會讓迴圈停下來的,我們需要一個讓表示式失效的方式來結束迴圈
//少部分情況需要迴圈一直執行,比如伺服器的請求響應監聽等
//迴圈條件一直為true就會造成無限迴圈(死迴圈)
例子
package com.kuang.Struch;
public class WhiileDemo01 {
public static void main(String[] args) {
//輸出1到100
int i = 0;
while (i < 100){
i++;
System.out.println(i);
}
}
}
package com.kuang.Struch;
public class WhileDemo02 {
public static void main(String[] args) {
//計算1+2+3+...+100=?
int i = 0;
int sum = 0;
while (i <= 100){
sum += i;
}
System.out.println(sum);//5050
}
}
2.do...while迴圈
對於while語句而言,如果不滿足條件,則不能進入迴圈,但有時候我們需要即使不滿足條件也至少執行一次
do...while迴圈和while迴圈相似,不同的是,do...while迴圈至少會執行一次
//語法
do{
//程式碼語句
}while(布林表示式);
while和do...while的區別
- while先判斷後執行,do...while是先執行後判斷!
- do...while總是保證迴圈體會被至少執行一次,這是他們的主要差別。
例子
package com.kuang.Struch;
public class DoWhileDemo01 {
public static void main(String[] args) {
int i = 0;
int sum = 0;
do {
sum += i;
i++;
}while (i <= 100);
System.out.println(sum);//5050
}
}
While和do...while對比
package com.kuang.Struch;
public class DoWhileDemo02 {
public static void main(String[] args) {
int a = 0;
while (a < 0){
System.out.println(a);
a++;
}
System.out.println("================");
do {
System.out.println(a);
a++;
}while (a < 0);
//輸出結果為:
//================
//0
}
}
3.for迴圈
for迴圈語句是支援迭代的一種通用結構,是最有效、最靈活的迴圈結構
for迴圈執行的次數是在執行前就確定的,語法格式如下:
for(初始化;布林表示式;更新){
//程式碼語句
}
例子
package com.kuang.Struch;
public class ForDemo01 {
public static void main(String[] args) {
int a = 1;//初始化條件
while (a <= 100){//條件判斷
System.out.println(a);//迴圈體
a += 2;//迭代
}
System.out.println("while迴圈結束!");
System.out.println("====================");
//初始化、條件判斷、迭代
for (int i = 1; i <= 100; i++){//這裡可以使用快捷鍵:100.for 會直接跳出寫好的迴圈體!!!
System.out.println(i);
}
System.out.println("for迴圈結束!");
/*
關於for迴圈有以下幾點說明:
1.最先執行初始化步驟,可以宣告一種型別,但可以初始化一個或多個迴圈控制變數,也可以是空語句
2.然後檢測布林表示式的值,如果為true執行迴圈體的內容,如果為false,迴圈停止,開始執行迴圈體後面的語句
3.執行一次迴圈後,更新迴圈控制變數(迭代因子控制迴圈變數的增減)
4.最後再次檢測布林表示式,迴圈執行上面的過程
*/
}
}
經典例子
例子1
package com.kuang.Struch;
public class ForDemo02 {
public static void main(String[] args) {
//計算0到100之間的奇數和偶數的和
int oddSum = 0;//奇數
int evenSum = 0;//偶數
for (int i = 0; i <= 100; i++) {
if (i % 2 != 0){
oddSum += i;//oddSum = oddSum + i;
}else {
evenSum += i;
}
}
System.out.println("奇數的和:" + oddSum);//2500
System.out.println("偶數的和:" + evenSum);//2550
}
}
例子2
package com.kuang.Struch;
public class ForDemo03 {
public static void main(String[] args) {
//用for迴圈輸出1-1000之間能被5整除的數,並且每行輸出3個
//計數器
int count=0;
for(int i = 1; i <= 1000; i++) {
if (i % 5 == 0) {
System.out.print(i + "\t");
count++;
}
if (count == 3) {//換行,每滿3個數字就換行
System.out.println();
//System.out.println("\n");
/*
println:輸出完會換行
print:輸出完不會換行
*/
count = 0;//換完清零,再重新計數
}
}
/*執行結果: 5 10 15
20 25 30
35 40 45
*/
}
}
例子3
package com.kuang.Struch;
public class ForDemo04 {
public static void main(String[] args) {
//九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (j * i) + "\t");
}
System.out.println();
}
}
}
4.增強型for迴圈
Java5引入了一種主要作用於陣列或集合的增強型for迴圈
for(宣告語句 : 表示式){
//程式碼句子
}
例子
package com.kuang.Struch;
//for與foreach對比
public class ForDemo05 {
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50};//定義了一個數組
for (int i = 0; i < 5; i++) {
System.out.print(numbers[i] + "\t");
}
System.out.println("\n" + "===================");
//遍歷陣列的元素
for (int x:numbers) {
System.out.print(x + "\t");
}
}
}
5.break和continue
break在任何迴圈語句的主體部分,均可用break控制迴圈流程。break用於強行退出迴圈,不執行迴圈中剩餘的語句。(break也在switch語句中使用)
例子
package com.kuang.Struch;
public class BreakDemo01 {
public static void main(String[] args) {
int i = 0;
while (i < 100){
i++;
System.out.println(i);
if(i == 30){
break;
}
}
System.out.println("hhh~");
//執行結果:輸出到30後,停止迴圈,再輸出hhh
}
}
continue語句用在迴圈語句體中,用於終止某次迴圈過程,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定。
package com.kuang.Struch;
public class ContinueDemo01 {
public static void main(String[] args) {
int i = 0;
while (i < 100){
i++;
if(i % 10 == 0){
System.out.println();
continue;
}
System.out.print(i + "\t");
/*輸出結果:
1 2 3 4 5 6 7 8 9
11 12 13 14 15 16 17 18 19
21 22 23 24 25 26 27 28 29
... */
}
}
}
6.練習
package com.kuang.Struch;
public class TestDemo {
public static void main(String[] args) {
//列印三角形,5行
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >= i; j--){
System.out.print(" ");
}
for (int j = 1; j <= i; j++){
System.out.print("*");
}
for (int j = 1; j < i; j++){
System.out.print("*");
}
System.out.println();
/*執行結果:
*
***
*****
*******
*********
*/
}
}
}