Смекни!
smekni.com

Общие представления о языке Java 5 (стр. 24 из 68)

- Если один из операндов целочисленный, а другой вещественный, сначала идёт преобразование целочисленного операнда к такому же вещественному типу, а потом выполняется оператор.

- В Java каждому примитивному типу сопоставляется объектный тип, то есть класс. Такие классы называются оболочечными (class wrappers). В общем случае они имеют те же имена, что и примитивные типы, но начинающиеся не со строчной, а с заглавной буквы. Исключение составляют типы int и char, для которых имена оболочечных классов Integer и Character.

- Основное назначение оболочечных классов – создание объектов, являющихся оболочками над значениями примитивных типов. Процесс создание такого объекта (“коробки” - box) из значения примитивного типа называется упаковкой (boxing), а обратное преобразование из объекта в величину примитивного типа – распаковкой (unboxing). Упаковка и распаковка для числовых классов осуществляется автоматически.

- В оболочечных классах имеется ряд полезных методов и констант. Например, минимальное по модулю не равное нулю и максимальное значение числового типа можно получить с помощью констант, вызываемых через имя оболочечного типа: Integer.MIN_VALUE, Integer.MAX_VALUE, Float.MIN_VALUE , Float.MAX_VALUE, Double.MIN_VALUE , Double.MAX_VALUE. и т.п.

- В Java имеется 15 уровней приоритета операторов. В хорошо написанной программе ставятся скобки, повышающие читаемость программы, даже если они не нужны с точки зрения таблицы приоритетов.

- Иногда требуется использовать элементы, которые не являются ни числами, ни строками, но ведут себя как имена элементов и одновременно обладают порядковыми номерами. Например, названия месяцев или дней недели. В этих случаях используют перечисления.

Типичные ошибки:

  • Очень часто встречается ошибка, когда вместо сравнения численных значений вида a==b программист пишет a=b.Чаще всего такая ошибка возникает в условных операторах: вместо if(a==b){...} пишут if(a=b){...}. В Java такая ошибка диагностируется на этапе компиляции для всех типов, кроме булевского. Для булевских a и b вызов if(a=b){...} приведёт к тому, что величине a будет присвоено значение b, и результат присваивания возвратится равным этому значению. А диагностики ошибки, к сожалению, выдано не будет.
  • Начинающие программисты, изучавшие ранее язык BASIC, пытаются использовать выражение вида a^b для возведения в степень, то есть для вычисления выражения ab. В Java для такой операции следует использовать выражение Math.pow(a,b).
  • Программисты, изучавшие ранее C/C++, пытаются использовать логические выражения вида a&b или a|b для полной (не укороченной) оценки логических выражений. В Java нет полной (не укороченной) оценки логических выражений, а операторы & и | зарезервированы для арифметических побитовых операций “И” и “ИЛИ”.
  • При использовании оператора instanceof пытаются написать instanceOf.
  • Путают класс java.lang.Math и пакет java.math .
  • Очень часто встречается ошибка, когда забывают, что для величин типа byte, short или char сначала происходит преобразование в тип int, и только после этого производится их подстановка в качестве операндов. Поэтому, в частности, побитовые операции с величинами этих типов дают те же результаты, что и при работе с величинами типа int.
  • Не ставятся скобки, группирующие операнды в длинных выражениях, где стороннему программисту неочевидна последовательность выполнения операндов.
  • Элементы перечисления пытаются задавать как строковые, или же пытаются предварительно задать числовые переменные с именами элементов перечисления.

Задания

  • На основе проекта с графическим пользовательским интерфейсом создать новый проект. В нём для каждого из целочисленных и вещественных типов задать переменные и кнопки с соответствующими надписями. При нажатии на кнопки должны показываться диалоговые панели с сообщением об имени и значении соответствующей переменной.
  • На основе проекта с графическим пользовательским интерфейсом создать новый проект. В нём сделать два пункта ввода, метку и кнопки “Сложить”, “Умножить”, “Разделить”, “sin”. По нажатию на кнопки“Сложить”, “Умножить”, “Разделить” в метку должен выводиться результат. Действия проводить с величинами типа double. По нажатию на кнопку “sin” в метку должен выводиться синус значения, показывавшегося до того в метке.
  • На основе проекта с графическим пользовательским интерфейсом создать новый проект. В нём сделать пункта ввода и радиогруппу с выбором варианта для каждого из целочисленных типов, а также кнопку JButton с надписью “Преобразовать в число”. При выборе соответствующего варианта в пункте ввода должно возникать случайным образом генерируемое число, лежащее в пределах допустимых значений для этого типа. При нажатии на кнопку содержимое пункта ввода должно быть преобразовано в число соответствующего типа, и это значение должно быть показано с помощью диалоговой панели с сообщением.

Работа с выбором вариантов осуществляется следующим образом:

if(jRadioButton1.isSelected() )

оператор1;

if(jRadioButton2.isSelected())

оператор2;

if(jRadioButton3.isSelected())

оператор3;

  • Создать приложение Java с графическим пользовательским интерфейсом. В нём должны быть перечислением Spring (“весна”), в котором перечислены весенние месяцы, и кнопки “ m2=m1” и “Вывести значение m2”. Задать две переменные типа Spring – m1 и m2. Переменную m1 инициализированной, со значением April, переменную m2 – не инициализированной. При нажатии на кнопку “ m2=m1” переменной m2 должно присваиваться значение m1. При нажатии на кнопку “Вывести значение m2” должно выводиться значение переменной m2.

Глава 4. Работа с числами в языке Java

Данная часть посвящена изучению работы с числами на более глубоком уровне. В ней рассматривается машинное представление целых и вещественных чисел, эффективное для аппаратной реализации, а также объясняются особенности и проблемы, к которым приводит такое представление.

4.1 Двоичное представление целых чисел

Позиционные и непозиционные системы счисления

Позиционная система счисления - это такой способ записи числа, при котором вес цифры зависит от занимаемой позиции и пропорционален степени некоторого числа. Основание степени называется основанием системы счисления.

Например, число 2006 в десятичной системе счисления представляется в виде суммы тысяч, сотен, десятков и единиц:

2006 = 2*103 + 0*102 + 0*101 + 6*100 ,

то есть слагаемых с различными степенями числа 10. По основанию степени - числу десять - система называется десятичной. Другие позиционные системы счисления отличаются только числом в основании степени.

При написании программ чаще всего используют десятичную, шестнадцатеричную (основание шестнадцать), восьмеричную (основание восемь) и двоичную (основание два) системы. Число различных знаков - цифр, используемых для записи чисел - в каждой системе равно основанию данной системы счисления.

0,1 - цифры двоичной системы

0,1,2,3,4,5,6,7 - цифры восьмеричной системы

0,1,2,3,4,5,6,7,8,9 - цифры десятичной системы

0,1,2,3,4,5,6,7,8,9,A,B,B,C,D,E,F - цифры шестнадцатеричной системы

В шестнадцатеричной системе "обычных" десятичных цифр недостаточно, и для обозначения цифр, больших девяти, используются заглавные латинские буквы A,B,C,D,E,F.

В дальнейшем везде, где это необходимо, мы будем указывать основание системы счисления индексом рядом с числом: 9510 - в десятичной системе, 27F16 - в шестнадцатеричной системе, 67528 - в восьмеричной системе, 10001112 - в двоичной системе.

Существует множество непозиционных систем счисления, в которых числа изображаются и называются по своим правилам. Для римской системы чисел характерны сопоставление отдельного знака каждому большому числу ( V - пять, X - десять, L - пятьдесят, C - сто, M - тысяча ), повторение знака столько раз, сколько таких чисел во всем числе ( III - три, XX - двадцать), отдельные правила для предшествующих и последующих чисел (IV - четыре, VI - шесть, IX - девять). Множество непозиционных систем счисления связано с традиционными способами измерения конкретных величин - времени ( секунда, минута, час, сутки, неделя, месяц, год), длины ( дюйм, фут, ярд, миля, аршин, сажень), массы ( унция, фунт), денежных единиц. Выполнение арифметических действий в таких системах представляет собой крайне сложную задачу.

Приведём пример самой простой из возможных систем счисления – унарную. В ней имеется всего одна цифра 1. В унарной системе счисления число 1 изображается как 1, число 2 изображается как 11, число 3 как 111, число 4 как 1111, и так далее. Первоначально вместо единицы использовались палочки (помните детский сад?), поэтому такая система счисления иногда называется палочковой. Как ни странно, она является позиционной.

Позиционные системы счисления с основанием 2 и более удобны для алгоритмизации математических операций с числами (вспомните способ сложения и умножения "столбиком"). Двоичная система является естественным способом кодирования информации в компьютере, когда сообщение представляется набором нулей ("0" - нет сигнала на линии) и единиц ("1" - есть сигнал на линии). Для обозначения двоичных цифр применяется термин "бит", являющийся сокращением английского словосочетания "двоичная цифра" (BInary digiT).

Архитектура компьютера накладывает существенное ограничение на длину информации, обрабатываемой за одну операцию. Эта длина измеряется количеством двоичных разрядов и называется разрядностью. С помощью восьми двоичных разрядов можно представить 28=256 целых чисел. Порция информации размером 8 бит (8-ми битовое число) служит основной единицей измерения компьютерной информации и называется байтом (byte). Как правило, передача информацией внутри компьютера и между компьютерами идет порциями, кратными целому числу байт.