Оператор Java Switch-это"или"/" и " возможно?



я реализовал систему шрифтов, которая определяет, какую букву использовать с помощью операторов char switch. В моем изображении шрифта есть только заглавные буквы. Мне нужно сделать так, чтобы, например, 'a' и 'A' имели один и тот же выход. Вместо того, чтобы иметь 2x количество случаев, это может быть что-то вроде следующего:



char c;

switch(c){
case 'a' & 'A': /*get the 'A' image*/; break;
case 'b' & 'B': /*get the 'B' image*/; break;
...
case 'z' & 'Z': /*get the 'Z' image*/; break;
}


возможно ли это в java?

541   5  

5 ответов:

вы можете использовать switch-case fall through, опуская break; заявление.

char c = /* whatever */;

switch(c) {
    case 'a':
    case 'A':
        //get the 'A' image;
        break;
    case 'b':
    case 'B':
        //get the 'B' image;
        break;
    // (...)
    case 'z':
    case 'Z':
        //get the 'Z' image;
        break;
}

...или вы могли бы просто нормализовать в нижний регистр или верхний регистр до switching.

char c = Character.toUpperCase(/* whatever */);

switch(c) {
    case 'A':
        //get the 'A' image;
        break;
    case 'B':
        //get the 'B' image;
        break;
    // (...)
    case 'Z':
        //get the 'Z' image;
        break;
}

выше, вы имеете в виду или нет. Пример и: 110 & 011 = = 010, который не является ни одной из вещей, которые вы ищете.

или, просто есть 2 случая без перерыва на 1-й. Например:

case 'a':
case 'A':
  // do stuff
  break;

выше все отличные ответы. Я просто хотел добавить, что когда есть несколько символов для проверки, if-else может оказаться лучше, так как вы можете вместо этого написать следующее.

// switch on vowels, digits, punctuation, or consonants
char c; // assign some character to 'c'
if ("aeiouAEIOU".indexOf(c) != -1) {
  // handle vowel case
} else if ("!@#$%,.".indexOf(c) != -1) {
  // handle punctuation case
} else if ("0123456789".indexOf(c) != -1) {
  // handle digit case
} else {
  // handle consonant case, assuming other characters are not possible
}

конечно, если это становится более сложным, я бы рекомендовал сопоставитель регулярных выражений.

из того, что я понимаю о вашем вопросе, перед передачей символа в оператор switch вы можете преобразовать его в нижний регистр. Поэтому вам не нужно беспокоиться о верхних регистрах, потому что они автоматически преобразуются в нижний регистр. Для этого вам нужно использовать следующую функцию:

Character.toLowerCase(c);

наблюдения на интересном Switch case ловушка -> fall through на switch

"операторы break необходимы, потому что без них операторы в блоках switch проваливаются:" пример Java Doc

фрагмент подряд case без break:

    char c = 'A';/* switch with lower case */;
    switch(c) {
        case 'a':
            System.out.println("a");
        case 'A':
            System.out.println("A");
            break;
    }

O/P для этого случая:

A

но если вы измените значение C, т. е. char c = 'a';, тогда это вам интересный.

O/P для этого случая:

a A

несмотря на то, что тест 2-го случая терпит неудачу, программа переходит на печать A, из-за отсутствия break который вызывает switch для обработки остальной части кода как блок. Все заявления после соответствующего метке Case, выполняются в определенной последовательности.

Comments

    Ничего не найдено.