JavaRush /Java Blog /Random-TW /Java 中的分支

Java 中的分支

在 Random-TW 群組發布
在本文中,我們將研究一般電腦程式和用 Java 編寫的電腦程式中的分支概念。讓我們談談控制結構,例如:
  • if-then(或if
  • if-then-else(或if-else
  • switch-case
Java 中的分支 - 1

分枝

讓我們從基本概念開始。任何程式都是由電腦執行的一組命令。大多數情況下,命令是一個接一個地按順序執行的。當您需要更改程式命令的順序流時,出現的情況會稍微少一些(但仍然很常見)。有時,根據某些條件,可能需要執行一組命令而不是另一組命令。當這些條件改變時,就做相反的事。例如,有許多網站禁止 18 歲以下人士造訪。通常,當第一次訪問此類資源時,用戶會收到某種形式的歡迎訊息,其中警告用戶年齡限制並要求輸入他的出生日期。然後,根據使用者輸入的數據,他將被允許或不允許輸入資源。此功能由通常所說的分支提供。我們再打個比方。讓我們想像一下自己正處於七條道路的十字路口。我們面臨一個選擇:左轉、右轉,還是直走。我們的選擇是基於一定的條件。我們也沒有機會同時走幾條路。那些。根據某些條件,我們將不得不選擇一條路。同樣的原則也適用於分支。現在讓我們試著給出分支的定義。分支是一種演算法設計,其中根據某些條件的真實性,執行多個操作序列之一。絕對所有程式語言都實現了分支(很可能)。Java 程式語言有幾個所謂的控制結構,可讓您在程式中實作分支。程式語言中有 3 種這樣的結構:
  • 操作員if-then
  • 操作員if-then-else
  • 三元運算符? :
在本文中,我們將了解if-else和運算符switch-case

如果-那麼

Operator if-then,或只是if最常見的運算子。「是的,寫 1 如果」這句話已經很流行了。此運算符if具有以下結構:
if (bool_condition) {
	statement
}
在這個設計中:
  • bool_condition是一個布林表達式,計算結果為 true 或 false。此表達式稱為條件。
  • statementbool_statement==true— 如果條件為 true ( )則必須執行的命令(可能有多個)
這個結構可以這樣讀:

Если (bool_condition), то {statement}
這裡有些例子:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    }
}
在此程式中,要求使用者輸入智慧型手機上的電池電量百分比。如果剩餘電量少於 10%,程式將警告用戶需要為智慧型手機充電。這是最簡單的設計範例if。值得注意的是,如果變數「a」大於或等於10,那麼什麼事也不會發生。程序將繼續執行if. 另請注意,在這種情況下,構造if只有一個要執行的操作序列:列印文本,或不執行任何操作。這是用一個「分支」進行分支的一種變體。這有時是必要的。例如,當我們想要保護自己免受錯誤價值觀的影響時。例如,如果字串是 ,我們無法找出字串中的字母數null。範例如下:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    }
}
執行main方法後,控制台將輸出以下內容:

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
透過檢查string != null,我們能夠避免程式中的錯誤。在變數string等於 的情況下不執行任何操作null

如果-那麼-否則

如果在通常情況下if程序有一個選擇:“做某事或什麼都不做”,那麼在if-else選擇程序時,它歸結為“做一件事或另一件事”。“不執行任何操作”選項消失。這種類型的分支有兩種或多種執行變體(或分支數量)。讓我們考慮一下有兩種選擇的情況。那麼控制結構有如下形式:
if (bool_condition) {
	statement1
} else {
	statement2
}
這裡:
  • bool_statement是一個布林表達式,計算結果為 true 或 false。此表達式稱為條件。
  • statement1bool_statement==true— 如果條件為 true ( )則必須執行的命令(可能有多個)
  • statement2bool_statement==false— 如果條件為 false ( )則必須執行的命令(可能有多個)
這個結構可以這樣讀:

Если (bool_condition), то {statement1}
Иначе {statement2}
這是一個例子:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    } else {
        System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
    }
}
關於智慧型手機電池電量的相同範例。只有當上次程式只警告需要為智慧型手機充電時,這次我們才會收到額外的通知。讓我們來看看這個if
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
如果為a < 10true(電池電量低於 10),程式將會列印一篇文字。a < 10否則,如果不滿足條件,程式將輸出完全不同的文字。我們還完成第二個範例,其中我們顯示一行中的字母數。上次如果傳遞的字串等於 ,則程式不會輸出任何內容null。讓我們透過將普通的if變成if-else
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    } else {
        System.out.println("Ошибка! Переданная строка равна null!");
    }
}
在該方法中,我們printStringSize為構造if添加了一個區塊else。現在,如果我們運行該程序,它將向控制台輸出不是 2 行,而是 4 行,儘管輸入(方法main)與上次相同。程式將輸出的文字:

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
else後面不是執行指令而是另一個 . 時,這種情況是可以接受的if。那麼構造採用以下形式:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
} else {
	statementN+1
}
這種設計有幾個條件:
  • 布林_條件1
  • 布林_條件2
  • 布林條件N
此類條件的數量不受限制。每個條件都有自己的命令:
  • 聲明1
  • 聲明2
  • 語句N
每一個statement可以包含 1 行或多行程式碼。條件一一核對。一旦確定了第一個真條件,就會執行一系列與該真條件「綁定」的指令。執行這些命令後,程式將退出該區塊if,即使前面還有更多檢查。如果上面定義的條件都不成立,則表達式「statementN+1」將會被執行。這個結構可以這樣讀:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
在這種情況下,最後一行是可選的。你可以沒有最後一個孤獨的人else。然後設計將採用以下形式:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
它會讀成這樣:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
因此,如果沒有一個條件為真,則不會執行任何命令。讓我們繼續看例子。讓我們回到智慧型手機充電水平的情況。讓我們編寫一個程序,該程序將更詳細地通知所有者其設備的充電水平:
public static void main(String[] args) {
    String alert5 = "Я скоро отключусь, но помни меня бодрым";
    String alert10 = "Я так скучаю по напряжению в моих жилах";
    String alert20 = "Пора вспоминать, где лежит зарядка";
    String alert30 = "Псс, пришло время экономить";
    String alert50 = "Хм, больше половины израсходовали";
    String alert75 = "Всё в порядке, заряда больше половины";
    String alert100 = "Я готов к приключениям, если что..";
    String illegalValue = "Такс, кто-то ввел некорректное meaning";

    Scanner scanner = new Scanner(System.in);
    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a <= 0 || a > 100) {
        System.out.println(illegalValue);
    } else if (a < 5) {
        System.out.println(alert5);
    } else if (a < 10) {
        System.out.println(alert10);
    } else if (a < 20) {
        System.out.println(alert20);
    } else if (a < 30) {
        System.out.println(alert30);
    } else if (a < 50) {
        System.out.println(alert50);
    } else if (a < 75) {
        System.out.println(alert75);
    } else if (a <= 100) {
        System.out.println(alert100);
    }
}
例如,在本例中,如果使用者輸入15,程式將在螢幕上顯示:“是時候記住充電器在哪裡了。” 儘管 15 小於 30、50、75 和 100,但螢幕上的輸出將僅為 1。讓我們編寫另一個應用程序,將當前是星期幾列印到控制台:
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    if (dayOfWeek == DayOfWeek.SUNDAY) {
        System.out.println("Сегодня воскресенье");
    } else if (dayOfWeek == DayOfWeek.MONDAY) {
        System.out.println("Сегодня понедельник");
    } else if (dayOfWeek == DayOfWeek.TUESDAY) {
        System.out.println("Сегодня вторник");
    } else if (dayOfWeek == DayOfWeek.WEDNESDAY) {
        System.out.println("Сегодня среда");
    } else if (dayOfWeek == DayOfWeek.THURSDAY) {
        System.out.println("Сегодня четверг");
    } else if (dayOfWeek == DayOfWeek.FRIDAY) {
        System.out.println("Сегодня пятница");
    } else if (dayOfWeek == DayOfWeek.SATURDAY) {
        System.out.println("Сегодня суббота");
    }
}
當然,這很方便,但大量單調的文字有點讓人眼花繚亂。在我們有大量選項的情況下,最好使用運算符,這將在下面討論。

開關盒

if有很多分支的粗體的替代方法是運算符switch-case。這個運算符似乎在說「所以,我們有這個變數。看,如果它的值等於`x`,那麼我們就這樣做,如果它的值等於`y`,那麼我們就做不同的事情,如果它不等於上面的任何一個,我們就這樣做就像這樣...”該運算符具有以下結構。
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
讓我們更詳細地看看這個結構。 argument 是一個變量,我們將其值與假設的不同選項進行比較。該變數必須是final. 另外值得一提的是,該運算子switch不支援任何資料類型作為參數。下面列出了有效類型:
  • 位元組和位元組
  • 又短又短
  • int 和整數
  • 字符和字符
  • 列舉
  • 細繩
case value1 (value2, valueN)- 這些是值,是我們用來比較變數值的特定常數argument。此外,每種情況都定義了一組需要執行的命令。 statement1statement2、是如果結果等於 之一statementN則需要執行的指令。例如,如果它等於,則程式將執行。 和是“預設值”。如果它不等於所提供的任何一個,則將觸發分支並執行命令。 和是運算符的可選屬性。 — 您可以注意到,在每個 case 區塊的最後都有一個語句。此運算符也是可選的,用於區分不同情況的程式碼。有時需要在不同的情況下執行相同的操作:然後可以將這些情況組合起來。在這種情況下,關鍵字被省略,運算子的結構將如下所示: argumentvalueargumentvalue2statement2defaultdefault_statementargumentvaluedefaultdefault_statementdefaultdefault_statementswitch-casebreakbreakbreakswitch-case
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
值得注意的是,`case valueX:` 和 `case valueY:` 之間沒有運算子break。這裡,如果argument等於value1,就會執行statement1。如果參數valueX等於valueY, statementXY。讓我們將難以理解的理論淡化為易於理解的實踐。讓我們使用運算符用一周中的幾天重寫該範例switch-case
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
            System.out.println("Сегодня воскресенье");
            break;
        case MONDAY:
            System.out.println("Сегодня понедельник");
            break;
        case TUESDAY:
            System.out.println("Сегодня вторник");
            break;
        case WEDNESDAY:
            System.out.println("Сегодня среда");
            break;
        case THURSDAY:
            System.out.println("Сегодня четверг");
            break;
        case FRIDAY:
            System.out.println("Сегодня пятница");
            break;
        case SATURDAY:
            System.out.println("Сегодня суббота");
            break;
    }
}
現在讓我們編寫一個程序,使用運算符顯示今天是工作日還是週末switch-case
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
        case SATURDAY:
            System.out.println("Сегодня выходной");
            break;
        case FRIDAY:
            System.out.println("Завтра выходной");
            break;
        default:
            System.out.println("Сегодня рабочий день");
            break;

    }
}
讓我解釋一下。在這個程序中,我們得到enum DayOfWeek,它表示一周中的當前日期。接下來,我們查看變數的值是否等於其中一個dayOfWeek的值。如果是這種情況,程式會顯示「今天休息」。如果不是,那麼我們檢查變數的值是否等於的值。如果是這種情況,程式會顯示「明天休息」。如果在這種情況下沒有,那麼我們幾乎沒有選擇,任何剩餘的一天都是工作日,因此預設情況下,如果今天不是星期五,不是星期六,也不是星期日,程式將顯示「今天是工作日」。 SUNDAYSATURDAYdayOfWeekFRIDAY

結論

因此,在本文中,我們研究了電腦程式中的分支。我們也弄清楚了在 Java 中使用哪些控制結構來實作分支。我們討論了以下設計:
  • if-then
  • if-then-else
  • switch-case
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION