PRAIT
@PRAIT

Ошибка в объявлении переменной char?

Всем привет ребята, пожалуйста подскажите мне как мне правильно объявить переменную char что бы калькулятор заработал.
Вот у меня есть код:

import java.util.Scanner;

public class SimpleCalculator {

  public static void main(String[] args) {
    try (Scanner dev = new Scanner(System.in)) {
      int a, b;
      System.out.println("Please enter number A");
      a = dev.nextInt();
      System.out.println("Please enter number B");
      b = dev.nextInt();
      System.out.println("Please enter {+, -, *, /}");
      char ch = new Scanner(System.in).nextLine().charAt(0); // char - вот эта строка
      if (ch == '+') {
        System.out.println("a + b = " + (a + b));
      } else if (ch == '-') {
        System.out.println("a - b = " + (a - b));
      } else if (ch == '*') {
        System.out.println("a * b = " + (a * b));
      } else if (ch == '/') {
        System.out.println("a / b = " + (a / b));
      } else {
        System.out.println(" " + ch);
      }
    }
  }
}


При таком исполнении код работает корректно, но я хочу обьявить ch сразу же после int и в этом случае почему то код перестаёт работать. Пожалуйста подскажите что я делаю не так?

import java.util.Scanner;

public class SimpleCalculator {

  public static void main(String[] args) {
    try (Scanner dev = new Scanner(System.in)) {
      int a, b;
      char ch;
      System.out.println("Please enter number A");
      a = dev.nextInt();
      System.out.println("Please enter number B");
      b = dev.nextInt();
      System.out.println("Please enter {+, -, *, /}");
      ch = dev.nextLine().charAt(0); // char - вот эта строка!!!
      if (ch == '+') {
        System.out.println("a + b = " + (a + b));
      } else if (ch == '-') {
        System.out.println("a - b = " + (a - b));
      } else if (ch == '*') {
        System.out.println("a * b = " + (a * b));
      } else if (ch == '/') {
        System.out.println("a / b = " + (a / b));
      } else {
        System.out.println(" " + ch);
      }
    }
  }

}
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Строка кода b = dev.nextInt() считывает из ввода число, но не следующий за ним символ перевода строки. Поэтому вызванный следом dev.nextLine() возвратит пустую строку, у которой нет символа по индексу 0. Лечится тупым, но действенным костылём - добавлением дополнительного считывания строки:
dev.nextLine();
ch = dev.nextLine().charAt(0);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Kotelov Санкт-Петербург
от 150 000 до 190 000 ₽
Emphasoft Санкт-Петербург
от 150 000 до 300 000 ₽