Вопрос по java, phonetics, java.util.scanner, switch-statement, string – Как я могу заставить этот оператор switch работать со сканером?

6

Я пытаюсь написать программу, которая переключит любую букву алфавита (верхний или нижний регистр) в фонетический алфавит. Например, если я введу «А» или "а" моя программа выдаст мне (замени)Альфа", Я'Мы провели много исследований по этому вопросу и поменялись заявлениями, но я продолжаю застрять. Я'Я понял, что могут использоватьсимвол» в сканере. Однако, когда я переоденусьсимвол» вСтрока» мой оператор 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;


}

}
}
Я бы предпочел сохранить карту <Персонаж, Строка> хранитьphonetic за каждого персонажа .. Rohit Jain

Ваш Ответ

4   ответа
0

Scanner.next() метод возвращаетStringнеcharтак что вам нужно получить первый символ этогоString с помощьюString.charAt(...) прежде чем сравнивать его сchars.

1
String letter;
String phonetic;
Map codes = new HashMap();
codes.put("A","Alpha");
codes.put("B","Bravo");
codes.put("C","Charlie");
codes.put("D","Delta");
    // not showing all assignments to make it shorter
codes.put("W","Whiskey");
codes.put("X","X-Ray");
codes.put("Y","Yankee");
codes.put("Z","Zulu");

Scanner kb = new Scanner(System.in);

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

phonetic = codes.get(letter);

if (phonetic == null) {
    System.out.println("bad code : " + letter);
} else {
    System.out.println("Phonetic: " + phonetic);
}
3

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

Map mapping = new HashMap();
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);
6

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

letter = kb.next().charAt(0);
ты быстрый, я просто писал то же самое =) Juvanis

Похожие вопросы