Использование данных char в операторе переключения

Я пытаюсь получить оператор case для добавления целого числа в массив целых чисел, используя данные char, извлеченные из строки.

int x = SString.length() - 1;
int[] values = new int[x + 1];
for (int i = 0; i <= x; i++) {
    System.out.println(keyword.charAt(i));
    switch (SString.charAt(i)) {
        case 'a':
            values[i] = 0;
        case 'b':
            values[i] = 1;
        case 'c':
            values[i] = 2;
            System.out.println(values[i]);
    }
}

мой ожидаемый результат для случая, когда SString = abc - это values = {0,1,2}. Вместо этого values = {2,2,2}.

Коммутаторам требуются операторы break.

khelwood 05.01.2019 23:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
1
41
3

Ответы 3

Вы забыли заявления break.

switch (SString.charAt(i)) {
case 'a':
    values[i] = 0;
    break;
case 'b':
    values[i] = 1;
    break;
case 'c':
    values[i] = 2;  
    break;
}

Чувствую себя абсолютным идиотом. Я смотрел на это около 3 часов, и это ни разу даже не пришло мне в голову.

3K04T 05.01.2019 23:51

Вы забыли о перерыве в каждом операторе case, все ли случаи проваливаются и в конечном итоге все заканчиваются values[i] = 2;

switch(SString.charAt(i)){
  case 'a':
    values[i] = 0;
    break; // this one for each
  case 'b':
    ...

Вы забыли оператор break, а System.out должен находиться за пределами оператора switch.

    String SString = "abc";
    int x = SString.length() - 1;
    int[] values = new int[x + 1];
    for (int i = 0; i <= x; i++) {
        switch (SString.charAt(i)) {
            case 'a':
                values[i] = 0;
                break;
            case 'b':
                values[i] = 1;
                break;
            case 'c':
                values[i] = 2;
                break;
            default:
                break;
        }
        System.out.print(values[i] + " ");
    }

Выход: 0 1 2

Другие вопросы по теме