Ввод данных с клавиатуры
Java позволяет осуществить ввод с клавиатуры различными способами.
Первый способ. Стандартный поток ввода (клавиатура) в Java представлен объектом – System.in. А стандартный поток вывода (дисплей) – объект System.out. Есть ещё стандартный поток для вывода ошибок – System.err.
import java.io.IOException;
public class Example2 {
public static void main(String[] args) {
char inChar;
System.out.println("Input simbol");
try {
inChar=(char)System.in.read();
System.out.println("You input "+inChar);
} catch (IOException e) {
System.out.println("Input ERROR");
}
}
}
Теперь разберем текст программы. Он у нас начинается с команды подключения библиотеки IOException:
import java.io.IOException;
Эта библиотека нужна для использования класса IOException –исключение ввода/вывода: если возникнет ошибка ввода вывода то будут выполнены команды после catch (которые заключены в операторные скобки). Без обработчика исключений в Java операции ввода быть не могут (как ввод с клавиатуры, так и из файла). Именно поэтому строка, где происходит ввод с клавиатуры, взят в try {...} catch (IOException e) {...}:
try {
inChar=(char)System.in.read();
System.out.println("You input "+inChar);
} catch (IOException e) {
System.out.println("Input ERROR");
}
если попытаться сделать просто без {...} catch (IOException e) {...}:
inChar=(char)System.in.read();
System.out.println("You input "+inChar);
то программа просто не скомпилируется.
Второй способ. Для ввода данных используется класс Scanner из библиотеки пакетов Java. Этот класс необходимо импортировать в той программе, где он будет использоваться. Это делается до начала открытого класса в коде программы. В классе есть методы для чтения очередного символа заданного типа со стандартного потока ввода, а также для проверки существования такого символа.
Для работы с потоком ввода необходимо создать объект класса Scanner, при создании указав, с каким потоком ввода он будет связан.
import java.util.Scanner; // импортируем класс
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // создаём объект класса Scanner
int i = 2;
System.out.print("Введите целое число: ");
if(sc.hasNextInt()) { // возвращает истинну если с потока ввода можно считать целое число
i = sc.nextInt(); // считывает целое число с потока ввода и сохраняем в переменную
System.out.println(i*2);
} else {
System.out.println("Вы ввели не целое число");
}
}
}
Метод hasNextDouble(), применённый объекту класса Scanner, проверяет, можно ли считать с потока ввода вещественное число типа double, а метод nextDouble() – считывает его. Если попытаться считать значение без предварительной проверки, то во время исполнения программы можно получить ошибку (отладчик заранее такую ошибку не обнаружит). Например, попробуйте в представленной далее программе ввести какое-то вещественное число:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double i = sc.nextDouble(); // если ввести букву s, то случится ошибка во время исполнения
System.out.println(i/3);
}
}
Имеется также метод nextLine(), позволяющий считывать целую последовательность символов, т.е. строку, а, значит, полученное через этот метод значение нужно сохранять в объекте класса String. В следующем примере создаётся два таких объекта, потом в них поочерёдно записывается ввод пользователя, а далее на экран выводится одна строка, полученная объединением введённых последовательностей символов.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1, s2;
s1 = sc.nextLine();
s2 = sc.nextLine();
System.out.println(s1 + s2);
}
}
Существует и метод hasNext(), проверяющий остались ли в потоке ввода какие-то символы.
Java класс Math
Разработчику на Java доступно множество готовых (или библиотечных) классов и методов, полезных для использования в собственных программах. Наличие библиотечных решений позволяет изящно решать множество типовых задач.
Класс Math содержит различные математически функции. Некоторые из них:
Math.abs(n) – возвращает модуль числа n.
Math.round(n) – возвращает целое число, ближайшее к вещественному числу n (округляет n).
Math.ceil(n) – возвращает ближайшее к числу n справа число с нулевой дробной частью (например, Math.ceil(3.4) в результате вернёт 4.0).
Math.cos(n), Math.sin(n), Math.tan(n) – тригонометрические функции sin, cos и tg от аргумента n, указанного в радианах.
Math.acos(n), Math.asin(n), Math.atan(n) – обратные тригонометрические функции, возвращают угол в радианах.
Math.toDegrees(n) – возвращает градусную меру угла в n радианов.
Math.toRadians(n) – возвращает радианную меру угла в n градусов.
Math.sqrt(n) – возвращает квадратный корень из n.
Math.pow(n, b) – возвращает значение степенной функции n в степени b, основание и показатель степени могут быть вещественными.
Math.log(n) – возвращает значение натурального логарифма числа n.
Math.log10(n) – возвращает значение десятичного логарифма числа n.
Все перечисленные функции принимают вещественные аргументы, а тип возвращаемого значения зависит от типа аргумента и от самой функции.
Кроме функций в рассматриваемом классе имеются две часто используемых константы:
Math.PI – число «пи», с точностью в 15 десятичных знаков.
Math.E – число Неппера (основание экспоненциальной функции), с точностью в 15 десятичных знаков.
Примеры использования:
System.out.println(Math.abs(-2.33)); // выведет 2.33
System.out.println(Math.round(Math.PI)); // выведет 3
System.out.println(Math.round(9.5)); // выведет 10
System.out.println(Math.round(9.5-0.001)); // выведет 9
System.out.println(Math.ceil(9.4)); // выведет 10.0
double c = Math.sqrt(3*3 + 4*4);
System.out.println(c); // выведет гипотенузу треугольника с катетами 3 и 4
double s1 = Math.cos(Math.toRadians(60));
System.out.println(s1); // выведет косинус угла в 60 градусов
Дата добавления: 2017-01-26; просмотров: 2748;