Основы языка Java
Использование класса Xterm
Методы clear и setPosition этого класса были полностью описаны ранее, а вот об уже встречавшемся методе print было рассказано далеко не все. Начнем с того, что в классе Xterm имеется целых три метода с именем print: с одним, двумя и тремя аргументами. Первый аргумент — выводимая строка, второй (в случае его наличия) определяет цвет символов, а третий (если он есть) — цвет фона.
Второй и третий аргументы являются просто целыми числами, которым для удобства использования присвоены символические имена:
public static final int Black = 0; public static final int Red = 1; public static final int Green = 2; public static final int Yellow = 3; public static final int Blue = 4; public static final int Magenta = 5; public static final int Cyan = 6; public static final int White = 7;
Класс Xterm дает возможность выводить только строки, но язык Java позволяет легко преобразовывать данные всех простых типов в строковое представление. Самым простым способом является использование оператора + с первым операндом, являющемся строкой. Оператор + является полиморфным и выполняется различным образом для чисел и строк:
2 + 2 // 4 "i = " + "c" // "i = c" "i = " + 2 // "i = 2" "x = " + (3./2.) // "x = 1.5" "" + (3./2.) // "1.5" 2 + "i = " // Ошибка!
Используя этот оператор и метод print класса Xterm, можно выводить значения переменных любого из простых типов. Полезно знать, что "" обозначает пустую строку, а печать "\n" приводит к тому, что курсор терминала перемещается в начало следующей строки.
Для того чтобы не добавлять постоянно к выводимой строке "\n", можно пользоваться методами println, действие которых в остальном совершенно аналогично работе методов print.
Оставшиеся неразобранными методы класса Xterm предназначены для ввода целых и действительных чисел. Они позволяют работать с величинами типов int, long, float и double. Их имена вполне естественны: inputInt, inputLong, inputFloat и inputDouble соответственно. Все эти методы возвращают в качестве результата введенное число, если только в процессе ввода не произошла какая-либо ошибка. При этом предполагается, что за один раз может быть введено только одно число, и ввод завершается нажатием на клавишу Enter.
Аналогично работает и метод inputChars, позволяющий осуществить ввод строки символьной информации, размещая ее в массиве символов.
Исключительная ситуация возникает, например, в случае ошибочного или целенаправленного ввода буквенных или управляющих символов, а также при вводе пустой строки. Про работу с исключительными ситуациями будет рассказано позже , а пока необходимо запомнить, что в том случае, когда программа использует ввод чисел, строку
public static void main(String[] args)
следует заменить на
public static void main(String[] args) throws Exception
Все четыре метода ввода чисел и метод ввода строки символов, определенные в классе Xterm, являются перегруженными (overload). Перегрузка методов — это своеобразное проявление полиморфизма, когда два или более различных методов имеют одно и то же имя и различаются только количеством или типами аргументов. Методы ввода класса Xterm позволяют указывать в качестве аргумента строку, которая будет выведена в качестве подсказки. Это весьма удобно, так как позволяет при выполнении программы явно увидеть, когда именно следует вводить ту или иную информацию.
Использование класса Xterm для организации операций ввода/вывода будет проиллюстрировано при решении следующей задачи.
Задача 2.3. Напишите программу, вводящую два целых числа a и b, печатающую их, затем обменивающую значения этих переменных (так, чтобы новое значение a стало равно старому значению b, и наоборот) и вновь их печатающую.
Текст программы
public class Change { public static void main(String[] args) throws Exception { int a = Xterm.inputInt("Введите первое число -> "); int b = Xterm.inputInt("Введите второе число -> "); Xterm.println("До обмена: a = " + a + "; b = " + b); int c = a; a = b; b = c; Xterm.println("После обмена: a = " + a + "; b = " + b); } }
Эта программа использует третью переменную c для того, чтобы сохранить в ней начальное значение переменной a, которое иначе оказалось бы утерянным при выполнении оператора присваивания a = b;. Попробуйте придумать какой-либо способ обменять значения двух переменных без введения третьей.