Вызов игнорировать регистр в операторах switch - PullRequest
1 голос
/ 06 июля 2019

В приведенном ниже коде, содержащем операторы switch, возможно ли включить метод equalsIgnoreCase, т. Е. Пользователь получает сообщение об оценке, введен или нет a или A и т. Д. И т. Д.?

Мне удалось получить правильный результат с помощью метода «преобразовать ввод пользователя в верхний регистр», но мне было любопытно, можно ли здесь использовать метод ignoreCase.Я пытался это сделать, но, похоже, это никак не работает, возможно, потому, что ignoreCase - это логическое значение, возвращающее результат true / false, а не сообщение.Я пытался исследовать это, но все онлайн результаты предлагают использовать метод toUpperCase, что я уже пробовал и работал.

  Scanner scan = new Scanner(System.in);
  System.out.println("Please enter grade.");
  String gradeLetter = scan.next();
  String message = "A";
  switch (gradeLetter) {
  case "A":
      message = "Excellent!";
      break;
  case "B":
      message = "Good job.";
      break;
  case "C":
      message = "You passed.";
      break;
  case "D":
      message = "You can do better.";
      break;
  case "F":
      message = "You failed.";
      break;
      default: message = gradeLetter + " is invalid.";
  }

    System.out.println(message);

Ответы [ 2 ]

3 голосов
/ 06 июля 2019

Вы могли бы switch (gradeLetter.toUpperCase()), но для меня это выглядит как лучший вариант использования Map<String, String>.Что-то вроде

Scanner scan = new Scanner(System.in);

Map<String, String> map = new HashMap<>();
map.put("A", "Excellent!");
map.put("B", "Good job.");
map.put("C", "You passed");
map.put("D", "You can do better.");
map.put("F", "You failed.");

// ... No Loop?
System.out.println("Please enter grade.");
String gradeLetter = scan.next();

System.out.println(map.getOrDefault(gradeLetter.toUpperCase(), 
        String.format("%s is invalid.", gradeLetter)));
2 голосов
/ 06 июля 2019

Как вы уже упоминали, вы можете включить gradeLetter.toUpperCase().

Вы также можете использовать провал, когда несколько меток регистра переходят к одному и тому же блоку кода:

switch (gradeLetter) {
  case "A":
  case "a":
      message = "Excellent!";
      break;
  case "B":
  case "b":
      message = "Good job.";
      break;
  /* etc */

Рассмотрим, например, «а» и «А». После case "A": нет оператора break, поэтому выполнение продолжается прямо в блок case "a":.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...