在本文中,我們將研究一般電腦程式和用 Java 編寫的電腦程式中的分支概念。讓我們談談控制結構,例如:
if-then
(或if
)if-then-else
(或if-else
)switch-case
分枝
讓我們從基本概念開始。任何程式都是由電腦執行的一組命令。大多數情況下,命令是一個接一個地按順序執行的。當您需要更改程式命令的順序流時,出現的情況會稍微少一些(但仍然很常見)。有時,根據某些條件,可能需要執行一組命令而不是另一組命令。當這些條件改變時,就做相反的事。例如,有許多網站禁止 18 歲以下人士造訪。通常,當第一次訪問此類資源時,用戶會收到某種形式的歡迎訊息,其中警告用戶年齡限制並要求輸入他的出生日期。然後,根據使用者輸入的數據,他將被允許或不允許輸入資源。此功能由通常所說的分支提供。我們再打個比方。讓我們想像一下自己正處於七條道路的十字路口。我們面臨一個選擇:左轉、右轉,還是直走。我們的選擇是基於一定的條件。我們也沒有機會同時走幾條路。那些。根據某些條件,我們將不得不選擇一條路。同樣的原則也適用於分支。現在讓我們試著給出分支的定義。分支是一種演算法設計,其中根據某些條件的真實性,執行多個操作序列之一。絕對所有程式語言都實現了分支(很可能)。Java 程式語言有幾個所謂的控制結構,可讓您在程式中實作分支。程式語言中有 3 種這樣的結構:- 操作員
if-then
- 操作員
if-then-else
- 三元運算符
? :
if-else
和運算符switch-case
。
如果-那麼
Operatorif-then
,或只是if
最常見的運算子。「是的,寫 1 如果」這句話已經很流行了。此運算符if
具有以下結構:
if (bool_condition) {
statement
}
在這個設計中:
bool_condition
是一個布林表達式,計算結果為 true 或 false。此表達式稱為條件。statement
bool_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。此表達式稱為條件。statement1
bool_statement==true
— 如果條件為 true ( )則必須執行的命令(可能有多個)statement2
bool_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 < 10
true(電池電量低於 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
。此外,每種情況都定義了一組需要執行的命令。 statement1
、statement2
、是如果結果等於 之一statementN
則需要執行的指令。例如,如果它等於,則程式將執行。 和是“預設值”。如果它不等於所提供的任何一個,則將觸發分支並執行命令。 和是運算符的可選屬性。 — 您可以注意到,在每個 case 區塊的最後都有一個語句。此運算符也是可選的,用於區分不同情況的程式碼。有時需要在不同的情況下執行相同的操作:然後可以將這些情況組合起來。在這種情況下,關鍵字被省略,運算子的結構將如下所示: argument
value
argument
value2
statement2
default
default_statement
argument
value
default
default_statement
default
default_statement
switch-case
break
break
break
switch-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
的值。如果是這種情況,程式會顯示「今天休息」。如果不是,那麼我們檢查變數的值是否等於的值。如果是這種情況,程式會顯示「明天休息」。如果在這種情況下沒有,那麼我們幾乎沒有選擇,任何剩餘的一天都是工作日,因此預設情況下,如果今天不是星期五,不是星期六,也不是星期日,程式將顯示「今天是工作日」。 SUNDAY
SATURDAY
dayOfWeek
FRIDAY
結論
因此,在本文中,我們研究了電腦程式中的分支。我們也弄清楚了在 Java 中使用哪些控制結構來實作分支。我們討論了以下設計:if-then
if-then-else
switch-case
GO TO FULL VERSION