Здравствуйте дорогие читатели!
Содержание
1. Начинающим2. Тема "на заказ"
3. Вопрос - ответ
4. Программный код…
5. JavaScript
Начинающим
Операторы
Операторы в языке Java — это специальные символы, которые сообщают транслятору о том, что вы хотите выполнить операцию с некоторыми операндами. Некоторые операторы требуют одного операнда, их называют унарными. Одни операторы ставятся перед операндами и называются префиксными, другие — после, их называют постфиксными операторами. Большинство же операторов ставят между двумя операндами, такие операторы называются инфиксными бинарными операторами. Существует тернарный оператор, работающий с тремя операндами.
В Java имеется 44 встроенных оператора. Их можно разбить на 4 класса - арифметические, битовые, операторы сравнения и логические.
Сегодня мы рассмотрим арифметические операторы
Арифметические операторы
Арифметические операторы используются для вычислений так же как в алгебре. Допустимые операнды должны иметь числовые типы. Например, использовать эти операторы для работы с логическими типами нельзя, а для работы с типом char можно, поскольку в Java тип char — это подмножество типа int.
Оператор | Результат |
+ | Сложение |
- | Вычитание (также унарный минус) |
* | Умножение |
/ | Деление |
% | Деление по модулю |
++ | Инкремент |
-- | Декремент |
+= | Сложение с присваиванием |
-+ | Вычитание с присваиванием |
*= | Умножение с присваиванием |
/= | Деление с присваиванием |
%= | Деление по модулю с присваиванием |
Четыре арифметических действия
Ниже, в качестве примера, приведена простая программа, демонстрирующая использование операторов. Обратите внимание на то, что операторы работают как с целыми литералами, так и с переменными.
class BasicMath { public static void int a = 1 + 1; int b = a * 3; main(String args[]) { int c = b / 4; int d = b - а; int e = -d; System.out.println("a = " + а); System.out.println("b = " + b); System.out.println("c = " + c); System.out.println("d = " + d); System.out.println("e = " + e); } }
Исполнив эту программу, вы должны получить приведенный ниже результат:
C: \> java BasicMath a = 2 b = 6 c = 1 d = 4 e = -4
Оператор деления по модулю
Оператор деления по модулю, или оператор mod, обозначается символом %. Этот оператор возвращает остаток от деления первого операнда на второй. В отличие от C++, функция mod в Java работает не только с целыми, но и с вещественными типами. Приведенная ниже программа иллюстрирует работу этого оператора.
class Modulus { public static void main (String args []) { int x = 42; double у = 42.3; System.out.println("x mod 10 = " + x % 10); System.out.println("y mod 10 = " + у % 10); } }
Выполнив эту программу, вы получите следующий результат:
С:\> Modulus x mod 10 = 2 y mod 10 = 2.3
Арифметические операторы присваивания
Для каждого из арифметических операторов есть форма, в которой одновременно с заданной операцией выполняется присваивание. Ниже приведен пример, который иллюстрирует использование подобной разновидности операторов.
class OpEquals { public static void main(String args[]) { int a = 1; int b = 2; int с = 3; a += 5; b *= 4; c += a * b; с %= 6; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); } }
А вот и результат, полученный при запуске этой программы: С:> Java OpEquals
а = 6 b = 8 с = 3
Инкремент и декремент
В С существует 2 оператора, называемых операторами инкремента и декремента (++ и --) и являющихся сокращенным вариантом записи для сложения или вычитания из операнда единицы. Эти операторы уникальны в том плане, что могут использоваться как в префиксной, так и в постфиксной форме. Следующий пример иллюстрирует использование операторов инкремента и декремента.
class IncDec { public static void main(String args[]) { int a = 1; int b = 2; int c = ++b; int d = a++; c++; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); System.out.println("d = " + d); } }Результат выполнения данной программы будет таким:
C:\ java IncDec a = 2 b = 3 c = 4 d = 1
Тема "на заказ"
Печать из Java-приложений.
Java 1.1 и последующие версии предлагают несколько простых методов печати, которые можно вызвать из Java-приложений.
Сначала мы рассмотрим относительно примитивные методы печати, которые предлагает Java, а затем изучим технологию объектно-ориентированного программирования. Знание данной технологии позволит нам построить более полезный и надежный объект Printer.
Основы печати на Java
Java 1.1 представляет класс PrintJob и дополнительный метод print(Graphics g) класса Container, которые образуют систему печати. Вы получаете объект класса PrintJob из класса Toolkit, взятого из класса Frame.
PrintJob pj = getToolkit().getPrintJob(frm, "printing", null);
Первым аргументом является фрейм приложения, вторым - любое имя задания для печати, а третьим - либо объект класса Properties, либо null. Поскольку система печати на Java не поддерживает никакие свойства, поэтому в качестве объекта вполне можно использовать null.
Класс PrintJob включает следующие методы:
end() | Заканчивает процесс печати и выполняет необходимую чистку. |
finalize() | Заканчивает процесс печати, как только к нему перестают поступать обращения. |
GetGraphics() | Получает объект Graphics, который изображается на следующей странице. |
GetPageDimension() | Возвращает размеры страницы в пикселах. |
GetPageResolution() | Возвращает разрешение страницы в пикселах на дюйм. |
LastPageFirst() | Возращает "true" ("истинно"), при условии что последняя страница печатается первой. |
Простая программа печати
Самой простой программой печати является та, которая:
- Создает фрейм;
- Получает объект PrintJob;
- Получает объект принтера Graphics;
- Передаёт данные для печати объекту принтера Graphics;
- Удаляет объект принтера Graphics, что приводит к выбросу страницы;
- Завершает процесс печати.
Пример подобной программы приводится далее:
import java.awt.*; public class Printer1 extends Frame { public Printer1() { //Получаем объект PrintJob PrintJob pjob = getToolkit().getPrintJob(this, "Printer", null); //Получаем объект Graphics Graphics pg = pjob.getGraphics(); //Печатаем pg.setFont(new Font("SansSerif",Font.PLAIN,12)); pg.drawString("Hello!!!", 100, 100); pg.dispose(); //Конец страницы pjob.end(); //Завершаем работу System.exit(0); //Выходим } static public void main(String argv[]) { new Printer1(); } }
- Данная программа поможет нам создать больше общих классов печати:
- Задание на печать должно создаваться во фрейме. Поэтому задания на печать почти всегда являются визуальными приложениями.
- Когда вы создаете класс PrintJob, появляется системный диалог принтера; после чего вы можете выбрать тип принтера и желаемое количество копий.
- Хотя задание на печать создается во фрейме, необязательно чтобы данный фрейм был визуальным или имел ненулевой размер.
- Прежде чем отправлять текст на принтер, вы должны выбрать шрифт.
- Процесс печати происходит путем передачи данных объекту принтера Graphics.
- Каждая страница распечатывается сразу и имеет свой собственный объект Graphics. А метод dispose() позволяет распечатать страницу до конца.
Недостатки простых способов печати
Данная простая программа печати выглядит достаточно примитивно. Мы должны печатать каждую строку текста, в конце каждой строки ставить символ переноса, сами задавать шрифт, а также задавать каждую страницу отдельно.
В следующем номере мы создадим более функциональный объект Printer, который сможет сам задавать, типы шрифтов и конец строки и к тому же, этот процесс будет скрыт от нас.
Вопрос - ответ
Вопрос:
В Graphics2D надо чтобы три картинки вращались независимо друг от друга. Я когда rotate делаю крутятся все, а надо для одной.
Серж
Ответ:
В Graphics2D всё прорисовывается последовательно, т.е. для прорисовки нескольких картинок относительно начальных координат необходимо:
Выполняем поворот на Phi1
Рисуем картинку1
Выполняем поворот на -Phi1 (приводи координатную плоскость в начальное положение)
Выполняем поворот на Phi2
Рисуем картинку2
Выполняем поворот на –Phi2 (приводи координатную плоскость в начальное положение)
Выполняем поворот на Phi3
Рисуем картинку3
Выполняем поворот на –Phi3 (приводи координатную плоскость в начальное положение)
Пример помещаю в раздел “Программный код…”
Вопрос:
Как из аплета перейти по заданной ссылке?
Сергей
Ответ:
try { AppletContext ap = getAppletContext(); ap.showDocument(new URL("http://my-site/"), "_self"); } catch(Exception e) { }
Вместо параметра _self можешь подставить _blank для открытия ссылки в новом окне или указать имя фрейма.
Программный код…
Вот простинький пример поворота изображения.
import java.awt.*; import java.awt.event.*; class RotateImg extends Frame { public RotateImg() { addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } }); } public static void main(String args[]) { System.out.println("Starting RotateImg..."); RotateImg mainFrame = new RotateImg(); mainFrame.setSize(400, 400); mainFrame.setTitle("RotateImg"); mainFrame.setVisible(true); } public void paint(Graphics g) { Image img1 = getToolkit().getImage("1.gif"); Graphics2D g2= (Graphics2D)g; g2.drawImage(img1,120,120,this); g2.rotate(Math.PI/10); g2.drawImage(img1,120,120,this); g2.rotate(-Math.PI/10); g2.translate(120,120); g2.rotate(Math.PI/2); g2.translate(-120,-120); g2.drawImage(img1,120,120,this); } }
JavaScript
Вопрос:
Не могли бы Вы предложить код JavaScript (для вставки на html-страницу), который выполнял бы следующую операцию:
Страница на сайте состоит из нескольких фреймов (fr1.html, fr2.html, fr3.html ).
В том случае, если посетитель открывает один из фреймов напрямую (допустим, получив ссылку из поискового каталога), JavaScript проверяет, что фрейм открыт отдельно от остальных фреймов и производит перезагрузку таким образом, чтобы страница показывалась с учетом всех фреймов (открывается файл index.html ) .
Структура страницы:
index.html - главный файл (разбивка на фреймы);
fr1.html - фрейм 1;
fr2.html - фрейм 2;
fr3.html - фрейм 3.
Виктор
Ответ:
Допустим, имена фреймов fr1, fr2, fr3, то необходимо в файл который загружается во фрейм fr1 вставить между тегами <head;> </head> следующие:
<script; language="JavaScript"> <!-- if(this.name!="fr1")document.location="index1.html" //--> </script>Подробнее на /javascript/examples/frame1.html
Вопросы присылайте на E-mail [email protected] с пометкой "вопрос по Java".
Жду вопросов и предложений.
Юрий Ладик.
Подписаться на эту рассылку можно тут /subs/subs.html