JavaRush /Blogue Java /Random-PT /Ramificação em Java

Ramificação em Java

Publicado no grupo Random-PT
Neste artigo veremos o conceito de ramificação em programas de computador em geral e naqueles escritos em Java. Vamos falar sobre estruturas de controle como:
  • if-then(ou if)
  • if-then-else(ou if-else)
  • switch-case
Ramificação em Java - 1

Ramificação

Vamos começar com os conceitos básicos. Qualquer programa é um conjunto de comandos executados por um computador. Na maioria das vezes, os comandos são executados sequencialmente, um após o outro. Um pouco menos frequentemente (mas ainda com bastante frequência) surgem situações em que você precisa alterar o fluxo sequencial dos comandos do programa. Às vezes, dependendo de certas condições, pode ser necessário executar um bloco de comandos em vez de outro. E quando essas condições mudarem, faça o oposto. Por exemplo, existem vários sites cuja visita é proibida para menores de 18 anos. Normalmente, ao visitar tal recurso pela primeira vez, o usuário é saudado com algum formulário no qual é avisado sobre o limite de idade e solicitado a inserir sua data de nascimento. Então, dependendo dos dados que o usuário inseriu, ele terá permissão para entrar no recurso ou não. Essa funcionalidade é fornecida pelo que é comumente chamado de ramificação. Vamos dar outra analogia. Vamos nos imaginar na encruzilhada de sete estradas. Temos uma escolha: virar à esquerda ou à direita, ou seguir em frente. Nossa escolha é baseada em certas condições. Também não temos oportunidade de percorrer várias estradas ao mesmo tempo. Aqueles. dependendo de algumas condições, teremos que escolher uma estrada. O mesmo princípio se aplica à ramificação. Agora vamos tentar dar uma definição de ramificação. A ramificação é uma construção algorítmica na qual, dependendo da veracidade de alguma condição, uma das diversas sequências de ações é executada. A ramificação é implementada (provavelmente) em absolutamente todas as linguagens de programação. A linguagem de programação Java possui várias construções de controle que permitem implementar ramificações em seu programa. Existem 3 dessas construções na linguagem de programação:
  • Operadorif-then
  • Operadorif-then-else
  • Operador ternário? :
Neste artigo veremos os operadores if-elsee switch-case.

se então

Operador if-then, ou simplesmente iftalvez o operador mais comum. A expressão “sim, escreva 1 se” já se popularizou. O operador ifpossui a seguinte estrutura:
if (bool_condition) {
	statement
}
Neste projeto:
  • bool_conditioné uma expressão booleana avaliada como verdadeira ou falsa. Esta expressão é chamada de condição.
  • statement— um comando (pode haver mais de um) que deve ser executado se a condição for verdadeira ( bool_statement==true)
Esta construção pode ser lida assim:

Если (bool_condition), то {statement}
aqui estão alguns exemplos:
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 процентов, подключите ваш смартфон к зарядному устройству");
    }
}
Neste programa, o usuário é solicitado a inserir a porcentagem de carga da bateria de seu smartphone. Se restarem menos de 10% da carga, o programa avisará o usuário sobre a necessidade de carregar o smartphone. Este é um exemplo do design mais simples if. Vale ressaltar que se a variável `a` for maior ou igual a 10, nada acontecerá. O programa continuará a executar o código que segue o arquivo if. Observe também que neste caso, a construção ifpossui apenas uma sequência de ações para executar: imprimir o texto ou não fazer nada. Esta é uma variação de ramificação com um “ramo”. Às vezes isso é necessário. Por exemplo, quando queremos nos proteger de valores incorretos. Por exemplo, não podemos descobrir o número de letras em uma string se a string for null. Exemplos abaixo:
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 da execução do método principal, o seguinte será enviado ao console:

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
Graças à verificação disso string != null, conseguimos evitar erros no programa. E não faça nada nos casos em que a variável stringera igual a null.

se-então-senão

Se, em condições normais, ifum programa tem uma escolha: “fazer algo ou não fazer nada”, então, ao if-elseescolher um programa, a escolha é “fazer uma coisa ou outra”. A opção “não fazer nada” desaparece. Existem duas ou mais variantes de execução (ou número de ramificações) com este tipo de ramificação. Consideremos o caso quando existem duas opções. Então a estrutura de controle tem a seguinte forma:
if (bool_condition) {
	statement1
} else {
	statement2
}
Aqui:
  • bool_statementé uma expressão booleana avaliada como verdadeira ou falsa. Esta expressão é chamada de condição.
  • statement1— um comando (pode haver mais de um) que deve ser executado se a condição for verdadeira ( bool_statement==true)
  • statement2— um comando (pode haver mais de um) que deve ser executado se a condição for falsa ( bool_statement==false)
Esta construção pode ser lida assim:

Если (bool_condition), то {statement1}
Иначе {statement2}
Aqui está um exemplo:
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");
    }
}
O mesmo exemplo sobre o nível da bateria de um smartphone. Só que se da última vez o programa apenas avisou sobre a necessidade de carregar o smartphone, desta vez temos uma notificação adicional. Vejamos este if:
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
Se for a < 10verdade (nível da bateria inferior a 10), o programa imprimirá um texto. Caso contrário, se a condição a < 10não for atendida, o programa produzirá um texto completamente diferente. Finalizemos também nosso segundo exemplo, no qual exibimos o número de letras em uma linha. Da última vez, o programa não gerou nada se a string passada fosse igual a null. Vamos consertar isso transformando o normal ifem 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!");
    }
}
No método , adicionamos um bloco printStringSizeà construção . Agora, se executarmos o programa, ele exibirá no console não 2 linhas, mas 4, embora a entrada (método ) permaneça a mesma da última vez. O texto que o programa irá gerar: ifelsemain

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
As situações são aceitáveis ​​quando elsesão seguidas não por comandos de execução, mas por outro if. Então a construção assume a seguinte forma:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
} else {
	statementN+1
}
Este design tem várias condições:
  • bool_condição1
  • bool_condição2
  • bool_condiçãoN
O número de tais condições não é limitado. Cada condição tem seus próprios comandos:
  • declaração1
  • declaração2
  • declaraçãoN
Cada um statementpode conter 1 ou mais linhas de código. As condições são verificadas uma por uma. Uma vez determinada a primeira condição verdadeira, uma série de comandos “vinculados” à condição verdadeira será executada. Após executar esses comandos, o programa sairá do bloco if, mesmo que houvesse mais verificações pela frente. A expressão “instruçãoN+1” será executada se nenhuma das condições definidas acima for verdadeira. Esta construção pode ser lida assim:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
A última linha neste caso é opcional. Você pode passar sem o último solitário else. E então o design terá a seguinte forma:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
E será assim:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Conseqüentemente, se nenhuma das condições for verdadeira, nenhum comando será executado. Passemos aos exemplos. Voltemos à situação do nível de carga do smartphone. Vamos escrever um programa que informará o proprietário com mais detalhes sobre o nível de carga de seu dispositivo:
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);
    }
}
Por exemplo, neste caso, se o usuário digitar 15, o programa exibirá na tela: “É hora de lembrar onde está o carregador”. Apesar de 15 ser menor e 30 e 50 e 75 e 100, a saída na tela será apenas 1. Vamos escrever outro aplicativo que imprimirá no console em que dia da semana estamos:
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("Сегодня суббота");
    }
}
É conveniente, claro, mas a abundância de texto monótono deslumbra um pouco os olhos. Nas situações em que temos um grande número de opções, é melhor utilizar a operadora, que será discutida a seguir.

caixa de comutação

Uma alternativa ao negrito ifcom muitas ramificações é o operador switch-case. Este operador parece dizer “Então, temos esta variável. Olha, se o valor dele for igual a `x`, então fazemos isso e aquilo, se o valor dele for igual a `y`, então fazemos de forma diferente, e se não for igual a nenhum dos itens acima, apenas fazemos é assim... ” Este operador possui a seguinte estrutura.
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
Vejamos essa estrutura com mais detalhes. argument é uma variável cujo valor compararemos com diferentes opções hipotéticas. A variável deve ser final. Vale dizer também que o operador switchnão suporta nenhum tipo de dado como argumento. Os tipos válidos estão listados abaixo:
  • byte e byte
  • curto e curto
  • int e inteiro
  • personagem e personagem
  • enumeração
  • Corda
case value1 (value2, valueN)- são valores, constantes específicas com as quais comparamos o valor de uma variável argument. Além disso, cada caso define um conjunto de comandos que precisam ser executados. statement1, statement2, statementNsão comandos que precisarão ser executados se argumentfor igual a um de value. Por exemplo, se argumentfor igual a value2, o programa será executado statement2. defaulte default_statementsão “valores padrão”. Caso argumentnão seja igual a nenhum dos apresentados value, então a ramificação será acionada defaulte o comando será executado default_statement. defaulte default_statementsão atributos opcionais do operador switch-case. break— você pode notar que no final de cada bloco case há uma instrução break. Este operador também é opcional e serve para diferenciar o código de diferentes casos. Às vezes é necessário realizar as mesmas ações em casos diferentes: então esses casos podem ser combinados. Neste caso, a palavra-chave breaké omitida e a estrutura do operador switch-caseficará assim:
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
É importante notar que não há operador entre `case valueX:` e `case valueY:` break. Aqui, se argumentfor igual a value1, será executado statement1. E se o argumento for igual valueXa valueY, statementXY. Vamos diluir a teoria difícil de entender em uma prática fácil de entender. Vamos reescrever o exemplo com dias da semana usando o 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;
    }
}
Agora vamos escrever um programa que mostre se hoje é dia de semana ou fim de semana usando o 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;

    }
}
Deixe-me explicar um pouco. Neste programa obtemos enum DayOfWeek, que denota o dia atual da semana. A seguir, verificamos se o valor da nossa variável é igual aos dayOfWeekvalores de SUNDAYqualquer uma delas SATURDAY. Se for este o caso, o programa exibe “Hoje é dia de folga”. Caso contrário, verificamos se o valor da variável é igual ao dayOfWeekvalor de FRIDAY. Se for esse o caso, o programa exibe “Amanhã é dia de folga”. Se neste caso não houver, então temos poucas opções, qualquer dia restante é dia de semana, então por padrão, se hoje NÃO for sexta, NÃO sábado e NÃO domingo, o programa exibirá “Hoje é dia útil”.

Conclusão

Portanto, neste artigo vimos o que é ramificação em um programa de computador. Também descobrimos quais estruturas de controle são usadas para implementar ramificações em Java. Discutimos projetos como:
  • if-then
  • if-then-else
  • switch-case
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION