JavaRush /Blog Java /Random-ES /Ramificación en Java

Ramificación en Java

Publicado en el grupo Random-ES
En este artículo veremos el concepto de bifurcación en programas informáticos en general y en los escritos en Java. Hablemos de estructuras de control como:
  • if-then(o if)
  • if-then-else(o if-else)
  • switch-case
Ramificación en Java - 1

Derivación

Empecemos por los conceptos básicos. Cualquier programa es un conjunto de comandos ejecutados por una computadora. La mayoría de las veces, los comandos se ejecutan secuencialmente, uno tras otro. Un poco menos a menudo (pero aún con bastante frecuencia) surgen situaciones en las que es necesario cambiar el flujo secuencial de los comandos del programa. En ocasiones, dependiendo de determinadas condiciones, puede ser necesario ejecutar un bloque de comandos en lugar de otro. Y cuando estas condiciones cambien, haz lo contrario. Por ejemplo, hay varios sitios cuya visita está prohibida a personas menores de 18 años. Por lo general, cuando visita un recurso de este tipo por primera vez, el usuario es recibido con algún formulario en el que se le advierte sobre el límite de edad y se le pide que ingrese su fecha de nacimiento. Luego, dependiendo de los datos que el usuario ingresó, se le permitirá ingresar al recurso o no. Esta funcionalidad la proporciona lo que comúnmente se denomina ramificación. Demos otra analogía. Imaginémonos en la encrucijada de siete caminos. Nos enfrentamos a una elección: girar a la izquierda o a la derecha, o seguir recto. Nuestra elección se basa en determinadas condiciones. Tampoco tenemos la posibilidad de tomar varios caminos al mismo tiempo. Aquellos. Dependiendo de algunas condiciones, tendremos que elegir un camino. El mismo principio se aplica a la ramificación. Ahora intentemos dar una definición de ramificación. La ramificación es una construcción algorítmica en la que, dependiendo de la verdad de alguna condición, se realiza una de varias secuencias de acciones. La ramificación se implementa (muy probablemente) en absolutamente todos los lenguajes de programación. El lenguaje de programación Java tiene varias construcciones de control que le permiten implementar ramificaciones en su programa. Hay 3 construcciones de este tipo en el lenguaje de programación:
  • Operadorif-then
  • Operadorif-then-else
  • operador ternario? :
En este artículo veremos los operadores if-elsey switch-case.

si-entonces

Operador if-then, o simplemente ifquizás el operador más común. La expresión “sí, escribe 1 si” ya se ha popularizado. El operador iftiene la siguiente estructura:
if (bool_condition) {
	statement
}
En este diseño:
  • bool_conditiones una expresión booleana que se evalúa como verdadera o falsa. Esta expresión se llama condición.
  • statement— un comando (puede haber más de uno) que debe ejecutarse si la condición es verdadera ( bool_statement==true)
Esta construcción se puede leer así:

Если (bool_condition), то {statement}
Aquí hay unos ejemplos:
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 процентов, подключите ваш смартфон к зарядному устройству");
    }
}
En este programa, se pide al usuario que introduzca el porcentaje de carga de la batería de su smartphone. Si queda menos del 10 por ciento de la carga, el programa advertirá al usuario sobre la necesidad de cargar el teléfono inteligente. Este es un ejemplo del diseño más simple if. Vale la pena señalar que si la variable "a" es mayor o igual a 10, entonces no sucederá nada. El programa continuará ejecutando el código que sigue al if. También tenga en cuenta que en este caso, la construcción iftiene sólo una secuencia de acciones para ejecutar: imprimir el texto o no hacer nada. Esta es una variación de la ramificación con una "rama". A veces esto es necesario. Por ejemplo, cuando queremos protegernos de valores incorrectos. Por ejemplo, no podemos averiguar el número de letras de una cadena si la cadena es null. Ejemplos a continuación:
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());
    }
}
Como resultado de ejecutar el método principal, se enviará lo siguiente a la consola:

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
Gracias a comprobarlo string != nullpudimos evitar errores en el programa. Y no hacer nada en los casos en que la variable stringfuera igual a null.

si-entonces-si no

Si, en condiciones normales, ifun programa tiene la opción de “hacer algo o no hacer nada”, entonces al if-elseelegir un programa todo se reduce a “hacer una cosa u otra”. La opción “no hacer nada” desaparece. Existen dos o más variantes de ejecución (o número de bifurcaciones) con este tipo de bifurcación. Consideremos el caso en el que hay dos opciones. Entonces la estructura de control tiene la siguiente forma:
if (bool_condition) {
	statement1
} else {
	statement2
}
Aquí:
  • bool_statementes una expresión booleana que se evalúa como verdadera o falsa. Esta expresión se llama condición.
  • statement1— un comando (puede haber más de uno) que debe ejecutarse si la condición es verdadera ( bool_statement==true)
  • statement2— un comando (puede haber más de uno) que debe ejecutarse si la condición es falsa ( bool_statement==false)
Esta construcción se puede leer así:

Если (bool_condition), то {statement1}
Иначе {statement2}
He aquí un ejemplo:
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");
    }
}
El mismo ejemplo sobre el nivel de batería de un smartphone. Solo que si la última vez el programa solo avisó sobre la necesidad de cargar el smartphone, esta vez tenemos una notificación adicional. Veamos este if:
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
Si a < 10es verdadero (nivel de batería inferior a 10), el programa imprimirá un texto. De lo contrario, si a < 10no se cumple la condición, el programa generará un texto completamente diferente. También finalicemos nuestro segundo ejemplo, en el que mostramos el número de letras en una línea. La última vez, el programa no generó nada si la cadena pasada era igual a null. Arreglemos esto convirtiendo el normal ifen 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!");
    }
}
En el método , agregamos un bloque printStringSizea la construcción . Ahora, si ejecutamos el programa, generará en la consola no 2 líneas, sino 4, aunque la entrada (método ) sigue siendo la misma que la última vez. El texto que generará el programa: ifelsemain

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
Las situaciones son aceptables cuando elseno van seguidas de comandos de ejecución, sino de otro if. Entonces la construcción toma la siguiente forma:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
} else {
	statementN+1
}
Este diseño tiene varias condiciones:
  • condición_bool1
  • condición_bool2
  • bool_conditionN
El número de tales condiciones no está limitado. Cada condición tiene sus propios comandos:
  • declaración1
  • declaración2
  • declaraciónN
Cada uno statementpuede contener 1 o más líneas de código. Las condiciones se verifican una por una. Una vez que se determina la primera condición verdadera, se ejecutará una serie de comandos "vinculados" a la condición verdadera. Después de ejecutar estos comandos, el programa saldrá del bloque if, incluso si hubiera más comprobaciones por delante. La expresión “sentenciaN+1” se ejecutará si ninguna de las condiciones definidas anteriormente es verdadera. Esta construcción se puede leer así:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
La última línea en este caso es opcional. Puedes prescindir del último solitario else. Y luego el diseño tomará la siguiente forma:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
Y se leerá así:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
En consecuencia, si ninguna de las condiciones es verdadera, no se ejecutará ni un solo comando. Pasemos a los ejemplos. Volvamos a la situación del nivel de carga del teléfono inteligente. Escribamos un programa que informe al propietario con más detalle sobre el nivel de carga de su dispositivo:
public static void main(String[] args) {
    String alert5 = "Я скоро отключусь, но помни меня бодрым";
    String alert10 = "Я так скучаю по напряжению в моих жилах";
    String alert20 = "Пора вспоминать, где лежит зарядка";
    String alert30 = "Псс, пришло время экономить";
    String alert50 = "Хм, больше половины израсходовали";
    String alert75 = "Всё в порядке, заряда больше половины";
    String alert100 = "Я готов к приключениям, если что..";
    String illegalValue = "Такс, кто-то ввел некорректное significado";

    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);
    }
}
Por ejemplo, en este caso, si el usuario ingresa 15, el programa mostrará en pantalla: “Es hora de recordar dónde está el cargador”. A pesar de que 15 es menos y 30 y 50 y 75 y 100, el resultado en pantalla será solo 1. Escribamos otra aplicación que imprima en la consola qué día de la semana es:
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("Сегодня суббота");
    }
}
Es conveniente, por supuesto, pero la abundancia de texto monótono deslumbra un poco la vista. En situaciones en las que tenemos una gran cantidad de opciones, es mejor utilizar el operador, que se comentará a continuación.

caja de interruptor

Una alternativa a la negrita ifcon muchas ramas es el operador switch-case. Este operador parece decir “Entonces, tenemos esta variable. Mira, si su valor es igual a `x`, entonces hacemos esto y aquello, si su valor es igual a `y`, entonces lo hacemos diferente, y si no es igual a ninguno de los anteriores, simplemente hacemos es así…” Este operador tiene la siguiente estructura.
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
Veamos esta estructura con más detalle. argument es una variable cuyo valor compararemos con diferentes opciones hipotéticas. La variable debe ser final. También vale la pena decir que el operador switchno admite ningún tipo de datos como argumento. Los tipos válidos se enumeran a continuación:
  • byte y byte
  • corto y corto
  • int y entero
  • carácter y carácter
  • enumeración
  • Cadena
case value1 (value2, valueN)- estos son valores, constantes específicas con las que comparamos el valor de una variable argument. Además, cada caso define un conjunto de comandos que deben ejecutarse. statement1, statement2, statementNson comandos que deberán ejecutarse si argumentresulta ser igual a uno de value. Por ejemplo, si argumentes igual a value2, entonces el programa se ejecutará statement2. defaulty default_statementson “valores predeterminados”. Si argumentno es igual a ninguno de los presentados value, entonces se activará la rama defaulty se ejecutará el comando default_statement. defaulty default_statementson atributos opcionales del operador switch-case. break— Puedes notar que al final de cada bloque de caso hay una declaración break. Este operador también es opcional y sirve para diferenciar el código de distintos casos. A veces es necesario realizar las mismas acciones en diferentes casos: entonces estos casos se pueden combinar. En este caso, breakse omite la palabra clave y la estructura del operador switch-casetendrá este aspecto:
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
Vale la pena señalar que no existe ningún operador entre `case valueX:` y `case valueY:` break. Aquí, si argumentes igual a value1, se ejecutará statement1. Y si el argumento es igual valueXa cualquiera de los dos valueY,. statementXYDiluyamos la teoría difícil de entender en una práctica fácil de entender. Reescribamos el ejemplo con los días de la semana usando el operador 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;
    }
}
Ahora escribamos un programa que muestre si hoy es un día laborable o un fin de semana usando el operador 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;

    }
}
Déjame explicar un poco. En este programa obtenemos enum DayOfWeek, que denota el día actual de la semana. A continuación, miramos para ver si el valor de nuestra variable es igual a dayOfWeeklos valores de SUNDAYcualquiera de ellas SATURDAY. Si este es el caso, el programa muestra "Hoy es día libre". En caso contrario, comprobamos si el valor de la variable es igual al dayOfWeekvalor de FRIDAY. Si este es el caso, el programa muestra "Mañana es día libre". Si en este caso no hay, entonces tenemos pocas opciones, cualquier día restante es un día laborable, por lo que de forma predeterminada, si hoy NO es viernes, NO sábado y NO domingo, el programa mostrará "Hoy es un día laborable".

Conclusión

Entonces, en este artículo analizamos qué es la ramificación en un programa de computadora. También descubrimos qué estructuras de control se utilizan para implementar ramificaciones en Java. Discutimos diseños como:
  • if-then
  • if-then-else
  • switch-case
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION