Как я могу заставить этот оператор 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;
}
}
}
4 ответа
Вам нужно использовать charAt. Scanner.next()
метод возвращает String
не char
так что вам нужно будет конвертировать String
в char
letter = kb.next().charAt(0);
Вы можете лучше создать Map<Character, String>
уберечь себя от письма 26 cases
в выключателе. Таким образом, вы просто должны get
Строка для конкретного персонажа.
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);
String letter;
String phonetic;
Map<String,String> codes = new HashMap<String,String>();
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);
}
Scanner.next()
метод возвращает String
не char
так что вам нужно получить первый символ этого String
с помощью String.charAt(...)
прежде чем сравнивать его с char
s.