JavaRush /Java 博客 /Random-ZH /Java 中的分支

Java 中的分支

已在 Random-ZH 群组中发布
在本文中,我们将研究一般计算机程序和用 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