Ввод символов с клавиатуры

162
12 марта 2019, 01:00

Тренируюсь и сделал вот такой небольшой пример:

import java.io.IOException;
public class Test {
    public static void main(String[] args) throws IOException {
        char ch;
        System.out.println("Введите данные в консоль: ");
        ch = (char) System.in.read();
        System.out.println(ch);
    }
}

Программа считывает введенные данные с клавиатуры (1 символ) и выводит в консоль.

Стало интересно, и я захотел поменять char на String и посмотреть как всё будет работать:

import java.io.IOException;
public class Test {
    public static void main(String[] args) throws IOException {
        String ch;
        System.out.println("Введите данные в консоль: ");
        String = (String) System.in.read();
        System.out.println(ch);
    }
}

Но идея выдала ошибку:

Inconvertible types; cannot cast 'int' to 'java.lang.String'

Я полез в гугл и нашел вот такую информацию:

Why this is not possible: Because String and Integer are not in the same Object hierarchy.

      Object
     /      \
    /        \
String     Integer

The casting which you are trying, works only if they are in the same hierarchy, e.g.

   Object
     /
    /
   A
  /
 /
B

In this case, (A) objB or (Object) objB or (Object) objA will work. Hence as others have mentioned already, to convert an integer to string use: String.valueOf(integer), or Integer.toString(integer) for primitive, or Integer.toString() for the object.

Далее я попробовал сделать вот так:

String = String.valueOf(ch) System.in.read(); //выдает ошибку: Variable 'ch' might not have been initialized

И вот так:

String = Integer.toString(ch) System.in.read();

Но ничего так и не заработало. Как мне правильно сделать и в чем проблема?

Answer 1

Integer.valueOf тут не поможет, так как будет возвращать код прочитанного символа в виде строки, а не строку из данного символа

Про вариант:

String = String.valueOf(ch) System.in.read();

В строке несколько ошибок:

  1. Слева от = в данном случае должно быть название переменной. Если переменная уже существует (например, ch), то достаточно её названия. Если переменная только создаётся, то нужны тип + название
  2. valueOf нужно брать от считанного значения (System.in.read()), а не от не инициализированной переменной
  3. Метод read возвращает int. Если взять valueOf от числа, то вернётся текстовое представление числа. Поэтому нужно число привести к char, дабы строка формировалась из символа

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

String ch = String.valueOf((char)System.in.read());

Для чтения строк из консоли целиком удобно пользоваться Scanner-ом:

Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
Answer 2

System.in.read() читает только один байт.

Для ввода текста нужно использовать сканнер System.in:

Scanner text = new Scanner(System.in);
READ ALSO
Значения параметра по умолчанию

Значения параметра по умолчанию

Я хочу сделать метод у которого есть параметр, который может принимать одно из трёх значений, причем если его не задавать, то одно из трёх...

223
Чем заполнять DesiredCapabilities и IOSdriver для ios (simulator and real device)

Чем заполнять DesiredCapabilities и IOSdriver для ios (simulator and real device)

Так же будет хорошо, если поделитесь инфой, о том что желательно установить на mac, для комфортного автоматизированного тестирования api

149
Android, перехват звонка, и перенаправление его по сети

Android, перехват звонка, и перенаправление его по сети

Каким способом можно перехватить звонок на Android, и перенаправить его на ПК, нашел как позвонить с помощью своего приложения, но нужно что бы звук...

151
Нет доступ к некоторым запросам после авторизации VK

Нет доступ к некоторым запросам после авторизации VK

Есть Spring Boot Web приложение которое использует Java VK SDKАвторизация в приложение происходит по клику на ссылку:

121