Как я могу заставить этот оператор switch работать с помощью сканера?

Я пытаюсь написать программу, которая будет переключать любую букву алфавита (верхние или строчные) в фонтический алфавит. Например, если я введу «А» или «а», моя программа даст мне (изменит на) «Альфа». Я провел так много исследований по этому поводу и переключил операторы, но я продолжаю застревать. Я понял, что не могу использовать «char» в сканере. Однако, когда я меняю 'char' на 'String', мой оператор switch искажается (в частности, toUpperCase в моем коде подчеркивается. Я не вижу своей ошибки. Вот что я сделал так далеко:

import java.util.Scanner;
public class PhoneticTranslate {
public static void main(String[] args) {


char letter;
String phonetic;

Scanner kb = new Scanner(System.in);


System.out.print("Please enter a letter: ");
letter = kb.next();

switch(Character.toUpperCase(letter))
{
case 'A':
    phonetic = "Alpha";
break;
case 'B':
    phonetic = "Bravo";
    break;
case 'C':
    phonetic = "Charlie";
    break;
case 'D': 
    phonetic = "Delta";
    break;
case 'E':
    phonetic = "Echo";
    break;
case 'F':
    phonetic = "Foxtrot";
    break;
case 'G':
    phonetic = "Golf";
    break;
case 'H':
    phonetic = "Hotel";
    break;
case 'I':
    phonetic = "India";
    break;
case 'J':
    phonetic = "Juliet";
case 'K':
    phonetic = "Kilo";
    break;
case 'L':
    phonetic = "Lima";
    break;
case 'M':
    phonetic = "Mike";
    break;
case 'N':
    phonetic = "November";
    break;
case 'O':
    phonetic = "Oscar";
    break;
case 'P':
    phonetic = "Papa";
    break;
case 'Q':
    phonetic = "Quebec";
    break;
case 'R':
    phonetic = "Romeo";
    break;
case 'S':
    phonetic = "Sierra";
    break;
case 'T':
    phonetic = "Tango";
    break;
case 'U':
    phonetic = "Uniform";
    break;
case 'V':
    phonetic = "Victor";
    break;
case 'W':
    phonetic = "Whiskey";
    break;
case 'X':
    phonetic = "X-Ray";
    break;
case 'Y':
    phonetic = "Yankee";
    break;
case 'Z':
    phonetic = "Zulu";
    break;


}

}
}

person user1753668    schedule 17.10.2012    source источник
comment
Я бы предпочел поддерживать Map‹Character, String› для хранения phonetic для каждого символа..   -  person Rohit Jain    schedule 17.10.2012


Ответы (3)


Вам нужно использовать charAt. Метод Scanner.next() возвращает String, а не char, поэтому вам нужно будет преобразовать String в char.

letter = kb.next().charAt(0);
person Amit Deshpande    schedule 17.10.2012
comment
ты быстрый, я только что написал то же самое =) - person Juvanis; 17.10.2012

Вы можете лучше создать Map<Character, String>, чтобы не писать 26 cases в переключателе. Таким образом, вам просто нужно get String для определенного символа.

Map<Character, String> mapping = new HashMap<Character, String>();
mapping.put('a', "Alpha");
mapping.put('b', "Beta");
..  And so on..

Конечно, вам придется взять на себя бремя инициализации Map, но это будет лучше, чем Mess из switch - case.

Преимущество в том, что вы также можете populate Map из некоторых file позже.

Затем, когда вы читаете символ со сканера, используйте charAt(0) для получения первого символа, потому что Scanner.next() возвращает строку: -

letter = kb.next().charAt(0);

// Fetch the Phonetic for this character from `Map`
phonetic = mapping.get(letter);
person Rohit Jain    schedule 17.10.2012