Java. Урок 13. Условия. Оператор Case

Уроки для начинающих   16 января 2013  Автор статьи:  

Если необходимо написать несколько условий, то используется оператор case. Оператор switch — case работает с точными сравнениями и имеет следующий синтаксис:

switch (переменная)
{
case значение1 : операторы1
case значение2 : операторы2
case значениеn : операторыn
default: операторыПоУмолчанию
}

Таким образом, если вам нужно вывести количество дней в зависимости от номера месяцы, то вы можете написать это с помощью if-ов:

int m;
int dayCount;
/*
Считали откуда - то m
*/
if(m==1) dayCount = 31;
if(m==2) dayCount = 28;
if(m==3) dayCount = 31;
if(m==4) dayCount = 30;
if(m==5) dayCount = 31;
if(m==6) dayCount = 30;
if(m==7) dayCount = 31;
if(m==8) dayCount = 31;
if(m==9) dayCount = 30;
if(m==10) dayCount = 31;
if(m==11) dayCount = 30;
if(m==12) dayCount = 31;

Но с помощью case сделать это можно намного проще:

switch (m) {
case 1: dayCount = 31;
break;
case 2: dayCount = 28;
break;
case 3: dayCount = 31;
break;
case 4: dayCount = 30;
break;
case 5: dayCount = 31;
break;
case 6: dayCount = 30;
break;
case 7: dayCount = 31;
break;
case 8: dayCount = 31;
break;
case 9: dayCount = 30;
break;
case 10: dayCount = 31;
break;
case 11: dayCount = 30;
break;
case 12: dayCount = 31;
break;
}

Если ни один из кейзов не выполнился, то можно задать группу операторов, которая выполнится по умолчанию:

switch (m) {
default: System.out.println("Error");
}

Кроме целочисленных значений, можно использовать и строковые, начиная с 7 JDK:

string month;
switch (month)
{
case "январь": dayCount = 31;
/*
И так далее
*/
}

Если не поставить оператор break в конце любой группы операторов, то выполнятся все группы оператором, начиная с той, где оператор case окажется истинным:

public class test {
public static void main(String[] args) {
int a = 0;
double b = (int) a;
switch (a)
{
case 2 : System.out.println(2);//не выполнится
case 0 : System.out.println(0);//выполнится
case 1 : System.out.println(1);//выполнится
}
}
}




Оператор case Delphi
Оператор case C++

  • EnderGenom

    множественные варианты для кейса через запятую есть?

    • Нет.

      • switch (a){
        case 1:
        case 2:
        System.out.println(a < 3);
        break;
        case 3:
        System.out.println(a == 3);
        break;
        default:
        System.out.println("wtf?");
        }

  • Svintus Lentus

    if(m==1) dayCount = 31;

    if(m==2) dayCount = 28;

    if(m==3) dayCount = 31;

    if(m==4) dayCount = 30;

    if(m==5) dayCount = 31;

    if(m==6) dayCount = 30;

    if(m==7) dayCount = 31;

    if(m==8) dayCount = 31;

    if(m==9) dayCount = 30;

    if(m==10) dayCount = 31;

    if(m==11) dayCount = 30;

    if(m==12) dayCount = 31;

    я бы так написал:
    int DayCount[11]=31,28,31,30,31,30,31,31,30,31,30,31;
    System.out(DayCount[m-1]);

  • Asia4444_

    Этот пример:
    switch (m) {
    case 1: dayCount = 31;
    break;
    case 2: dayCount = 28;
    break;
    case 3: dayCount = 31;
    break;
    case 4: dayCount = 30;
    break;
    case 5: dayCount = 31;
    break;
    case 6: dayCount = 30;
    break;
    case 7: dayCount = 31;
    break;
    case 8: dayCount = 31;
    break;
    case 9: dayCount = 30;
    break;
    case 10: dayCount = 31;
    break;
    case 11: dayCount = 30;
    break;
    case 12: dayCount = 31;
    break;
    Можно записать короче, вот так:
    switch (m) {
    case 12
    case 10:
    case 8:
    case 7:
    case 5:
    case 3:
    case 1: dayCount = 31;
    break;
    case 2: dayCount = 28;
    break;
    case 4:
    case 6:
    case 9:
    case 11: dayCount = 30;
    break;
    И такая конструкция похожа на перечисление через запятую.

Научиться программировать

  • на Delphi

  • на Java

  • на C++