Начал изучать джаву. Добрался до ввода с консоли. Есть два способа, ну или я нашёл только два: сканер и буферридер. Со сканером вроде разобрался, там можно проверить вводимые данные с помощью методов hasNext...() Например, что введен инт можно так вот проверить:
Scanner sc = new Scanner(System.in);
if (sc.hasNextInt())
int number = sc.nextInt();
else
System.out.println("Не число.");
Только там вместо sout надо "бросать исключения", но в этом я ещё не разобрался пока.
А что делать с буферридером? Как его проверять? Читал что-то про "обрабатывать исключения" не совсем понял, как уже писал выше Может кто-то может на примере написать правильный код, например, для ввода интового значения. Я так понимаю, что проверить нужно на не пустоту и тип инт?
Если числа пишутся каждое в своей строке то можно использовать такой способ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i;
try
{
i = Integer.parseInt(br.readLine());
}
catch(NumberFormatException e)
{
System.out.println("NumberFormatException");
}
метод readLine возвращает строку введенную в консоли, а метод parseInt возвратит число, если строка которую передают как параметр соответствует формату числа. Иначе он вызовет исключение NumberFormatException. Но этот метод довольно капризный, даже пробел в начале строки помешает получить число.
В Java есть 3 способа чтения входных данных из консоли:
Разницу можно почитать здесь и здесь.
Код с примерами использования всех способов:
import java.io.BufferedReader;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class ConsoleInputExamples
{
public static void main(String[] args)
{
usingConsoleReader();
usingBufferedReader();
usingScanner();
}
private static void usingConsoleReader()
{
Console console = null;
String inputString = null;
try
{
// cоздать объект console
console = System.console();
// если console не равен null
if (console != null)
{
// прочитать строку из пользовательского ввода
inputString = console.readLine("Name: ");
// вывод строки
System.out.println("Name entered : " + inputString);
}
} catch (Exception ex)
{
ex.printStackTrace();
}
}
private static void usingBufferedReader()
{
System.out.println("Name: ");
try{
BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
String inputString = bufferRead.readLine();
System.out.println("Name entered : " + inputString);
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
private static void usingScanner()
{
System.out.println("Name: ");
Scanner scanIn = new Scanner(System.in);
String inputString = scanIn.nextLine();
scanIn.close();
System.out.println("Name entered : " + inputString);
}
}
Одно из основных отличий между BufferedReader и классом Scanner заключается в том, что первый класс предназначен только для чтения строковых или текстовых данных, тогда как класс Scanner предназначен как для чтения, так и для анализа текстовых данных в примитивных типах Java, таких как int, short, float, double и long.
BufferedReader может только String читать, а Scanner может читать как String, так и другие типы данных, такие как int, float, long, double, float и т.д.
Таким образом, BufferedReader не предоставляет напрямую методов для чтения integer введённого пользователем. Можно использовать метод readLine(), однако изначально придется считывать integer в формате String.
В случае с методом parseInt(), он принимает String значение, парсит его как десятичный integer и возвращает.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Зачем делать private переменные и при этом создавать для них гэттеры и сеттеры?
столкнулся с такой проблемой, у меня есть контейнер (ListView) и я читаю в него файл, ну соответственно, когда файл большой программа виснетЧто...
Как сделать так чтобы при нажатие на кнопку android приложения, выйти из приложения и поверх всех окон блокировать тач скрин, нажатие на экранА...