Я хочу преобразовать эту часть кода переключателя в одну строку, используя троичные операторы - PullRequest
0 голосов
/ 21 февраля 2020
for(int i=0; i<num.length; i++){
    switch(num[i]/10){
        case 10:
        case 9:
            aCount++;
            break;
        case 8:
            bCount++;
            break;
        case 7:
            cCount++;
            break;
        case 6:
            dCount++;
            break;
        default: fCount++;
    }

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

1 Ответ

1 голос
/ 21 февраля 2020

Не легко, нет. Во-первых, вы не указали язык , it может быть возможным в C ++ с помощью ссылок или в C с помощью указателей. Но даже если возможно , вы, скорее всего, получите действительно некрасивый код.

Если вы просто хотите улучшить читаемость (обычно причина более короткого кода, на мой взгляд), это можно сделать без изменения структуры кода, что-то вроде (при условии, что это отметки 0..100 и оценки a..f):

for (int i = 0; i < num.length; i++) {
    // Map <60 to f, 6x to d, 7x to c, 8x to b, 90+ to a.

    switch (num[i] / 10) {
        case 10: case 9: aCount++; break;
        case 8:          bCount++; break;
        case 7:          cCount++; break;
        case 6:          dCount++; break;
        default:         fCount++;
    }
}
...