Преобразования числовых типов




Объявление переменных в java

Пример:

int x = 1;

int y = 2;

При объявлении переменной, в следующей последовательности указываются:

· тип данных (в данном примере — int — переменная содержит целое число),

· имя переменной (в данном примере имена — x и y),

· начальное значение переменной или, другими словами, инициализация переменной. В данном примере переменным x и y присвоены значения 1 и 2. Однако, это не является обязательным условием при объявлении переменной.

Пример: объявление переменных без инициализации:

int x;

int y;

После каждой строки при объявлении переменных необходимо ставить точку с запятой «;».

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

int x,y;

Правила именования переменных в java

1. Имя переменной должно начинаться с буквы (маленькой) и состоять из букв (Unicode) цифр и символа подчеркивания «_». Технически возможно начать имя переменной также с «$» или «_», однако это запрещено соглашением по оформлению кода в Java (Java Code Conventions). Кроме того, символ доллара «$», по соглашению, никогда не используется вообще. В соответствии с соглашением имя переменной должно начинаться именно с маленькой буквы (с заглавной буквы начинаются имена классов). Пробелы при именовании переменных не допускаются.

2. Имя переменной не должно быть ключевым или зарезервированным словом языка Java.

3. Имя переменной чувствительно к регистру. newVariable и newvariable — разные имена.

4. При выборе имени переменных, следует использовать полные слова вместо загадочных аббревиатур. Это сделает ваш код более удобным для чтения и понимания. Во многих случаях это также сделает ваш код самодокументируемым.

5. Если выбранное вами имя переменной состоит только из одного слова — запишите его маленькими буквами. Если оно состоит из более чем одного слова, то отделяйте каждое последующее слово в имени переменной заглавной буквой. Например: superCounter, myDomesticAnimal

6. Если переменная сохраняет постоянное значение, то каждое слово следует писать заглавными буквами и отделять при помощи символа подчеркивания. Пример:static final int NUMBER_OF_HOURS_IN_A_DAY = 24

 

Типы данных в java

Каждая переменная и каждое выражение в Java обладает типом и этот тип строго определен.

Примитивные типы данных

В Java существует 8 примитивных типов данных:

· byte (целые числа, 1 байт)

· short (целые числа, 2 байта)

· int (целые числа, 4 байта)

· long (целые числа, 8 байтов)

· float (вещественные числа, 4 байта)

· double (вещественные числа, 8 байтов)

· char (символ Unicode, 2 байта)

· boolean (значение истина/ложь, 1 байт)

Эти 8 типов служат основой для всех остальных типов данных. Примитивные типы обладают явным диапазоном допустимых значений.

byte— диапазон допустимых значений от -128 до 127

//объявление переменных типа byte.

byte getByte, putByte;

// инициализация переменных

getByte = 0;

putByte = 0;

Переменные типа byte полезны при работе с потоком данных, который поступает из сети или файла.

short - диапазон допустимых значений от -32768 до 32767

//объявление и инициализация переменной типа short.

short employeeID = 0;

int— диапазон допустимых значений от -2147483648 до 2147483647

//объявление и инициализация переменной типа int.

int max = 2147483647;

Тип int используется чаще при работе с целочисленными данными, нежели byte иshort, даже если их диапазона хватает. Это происходит потому, что при указании значений типа byte и short в выражениях, их тип все равно автоматически повышается до int при вычислении.

long— диапазон допустимых значений от -9223372036854775808 до 9223372036854775807

//Использование переменных типа long.

long days = getDays();

long seconds;

seconds = days * 24 * 60 * 60;

Тип удобен для работы с большими целыми числами.

float— диапазон допустимых значений от ~1,4*10-45 до ~3,4*1038

//Объявление и инициализация переменных типа float.

float usd = 31.24;

float eur = 44.03;

Удобен для использования, когда не требуется особой точности в дробной части числа.

double — диапазон допустимых значений от ~4,9*10-324 до ~1,8*10308

//Объявление и инициализация переменных типа float.

double pi = 3.14159;

Математические функции такие как sin(), cos(), sqrt() возвращают значение double

char — символьный тип данных представляет собой один 16-битный Unicode символ. Он имеет минимальное значение ‘\ u0000′ (или 0), и максимальное значение ‘\ uffff’ (или 65535 включительно). Символы char можно задавать также при помощи соответствующих чисел. Например символ ‘Ы’ соответствует числу 1067. Рассмотрим на примере:

public static void main(String[] args) {

 

char symb1=1067;

char symb2 ='Ы';

 

System.out.println("symb1 contains "+ symb1);

System.out.println("symb2 contains "+ symb2);

}

Вывод этой программы будет:

symb1 contains Ы

symb2 contains Ы

Небольшой пример того, как узнать, какому числу соответствует символ. Основан на претиповании данных.

public static void main(String[] args) {

 

char ch = 'J';

int intCh = (int) ch;

 

System.out.println("J corresponds with "+ intCh);

}

На выводе программа показывает, что символу 'J' соответствует число 74.

J corresponds with 74

boolean — предназначен для хранения логических значений. Переменные этого типа могут принимать только одно из 2х возможных значений true или false.

//Объявление и инициализация переменной типа boolean.

boolean b = true;

 

 

Тип String

Тип String не является примитивным типом данных, однако это один из наиболее используемых типов в Java. String предназначен для хранения строк текста. Несколько примеров использования String

//Создание строки с помощью конструктора

String myString = new String("The weather was fine");

//Можно также создать строку используя кавычки ""

String myString = "The weather was fine";

Для строк определен оператор «+»

public static void main(String[] args) {

 

String s1 = "I have ";

String s2 = " apples ";

int num = 3;

String s = s1 + num + s2;

 

System.out.println(s);

}

Вывод программы.

I have 3 apples

 

 

Ссылочные типы данных

В ссылочные типы входят все классы, интерфейсы, массивы. Описанный выше тип Stringтакже относится к ссылочным типам. Этот класс из стандартной библиотеки Java.

Также существуют классы-оболочки:

· Byte

· Short

· Integer

· Long

· Float

· Double

· Character

· Boolean

В отличие от примитивных типов, они пишутся с заглавной буквы. Эти типы соответствуют примитивным типам, однако являются ссылочными. Их классы cодержат методы для преобразования типов, а также другие константы и методы полезные при работе с примитивными типами данных.

В качестве типа также выступает любой созданный нами класс при создании инстанции класса. Вспомним прошлый урок, где мы создали класс Cat, а потом создали переменнуюourcat типа Cat при создании экземпляра класса.

Cat ourcat = new Cat();

На этом закончим наше знакомство с переменными и типами в Java.

 

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

№2

Классы-оболочки

Кроме базовых типов данных, в языке Java широко используются соответ-ствующие классы-оболочки (wrapper-классы) из пакета java.lang: Boolean, Character, Integer, Byte, Short, Long, Float, Double. Объекты этих классов могут хранить те же значения, что и соответствующие им базовые типы.

Объекты этих классов представляют ссылки на участки динамической памя-ти, в которой хранятся их значения, и являются классами-оболочками для значе-ний базовых типов. Классы, соответствующие числовым базовым типам, находят-ся в библиотеке java.lang, являются наследниками абстрактного класса Number и реализуют интерфейс Comparable, представляющий собой интер-фейс для определения возможности сравнения объектов одного типа между со-бой. Объекты классов-оболочек по умолчанию получают значение null.

Переменную базового типа можно преобразовать к соответствующему объ-екту, передав ее значение конструктору при объявлении объекта. Объекты клас-са могут быть преобразованы к любому базовому типу методами типValue() или обычным присваиванием.

Класс Character не является подклассом Number, этому классу нет необ-ходимости поддерживать интерфейс классов, предназначенных для хранения ре-зультатов арифметических операций. Класс Character имеет целый ряд специ-фических методов для обработки символьной информации. У класса Character, в отличие от других классов оболочек, не существует конструктора с параметром типа String.

№3 Операторы в Java В Java поддерживаются следующие арифметические операторы (табл. 2.4). Таблица 2.4. Арифметические операторы + Сложение - Вычитание * Умножение / Деление % Вычисление остатка ++ Инкремент -- Декремент += Присваивание со сложением -= Присваивание с вычитанием *= Присваивание с умножением /= Присваивание с делением %= Присваивание с вычислением остатка   Первые пять операторов всем знакомы по школьному курсу математики, причем два так называемых унарных оператора, и можно использовать для указания знака данною числа. Далее следуют операторы под названием инкремент (++) и декремент (- -). Один из них (инкремент) прибавляет к значению переменной единицу, другой (декремент), наоборот, убавляет единицу. Данные операторы указываются без пробела рядом со значением переменной. Если они стоят слева от переменной, то это называется префиксной формой инкремента или декремента, и это означает, что вначале к переменной прибавляется (или от нее отнимается) единица, а потом она используется в выражении. Если же инкремент (или декремент) ставится после имени переменной, то это называется постфиксной формой, и это означает, что переменная вначале используется в выражении, а затем к ней прибавляется (или от нее отнимается) единица. Остальные пять операторов используются следующим образом: а += b аналогично записи: а = а + b   Пример использования всех этих операторов приведен в листинге 2.9. Листинг 2.9. Пример использования арифметических операторов class Example { public static void main (String args[]) { int a,b,c,d,e; a=10 b= 11; c= 12; a+ = b; // a=21 a *= c; // a = 252 a = a - c; // a = 240 a -= c; // a = 228 d = 5; e = 10; System.out.println (++d); Выведется 6 System.out.println (d++); Выведется 6 System.out.println (e--); Выведется 10 System.out.println (--e); Выведется 8 } }   Теперь рассмотрим битовые (поразрядные) операторы (табл. 2.5). Таблица 2.5. Битовые (поразрядные) операторы Оператор Описание - Унарное отрицание & Поразрядное И | Поразрядное ИЛИ ^ Поразрядное исключающее ИЛИ << Сдвиг битов влево >> Сдвиг битов вправо >>> Сдвиг битов вправо с заполнением старшего бита нулем &=, | =, ^=, <<=, >>=, >>>= Присвоение с аналогичной операцией   С помощью данных операторов мы работаем над числами в их двоичном представлении. Рассмотрим, например, запись числа 15 в двоичной форме. 00001111 Первый оператор, называемый унарным отрицанием, превращает 0 в 1, а 1 в 0. Оператор поразрядного "и" создает в итоге единицу, если у обоих аналогичных битов сравниваемых чисел тоже 1. Если у них другое сочетание чисел, то итог будет 0. Например: С = А & В Предположим, А = 15 (00001111), а В равно 10 (00001010). Число С в таком случае будет равно 10 (00001010). Поразрядное "ИЛИ" означает следующее: если хотя бы один из битов равен 1, то итог тоже 1. Поразрядное исключающее "ИЛИ" возвращает 1, если только один из битов сравниваемых чисел равно 1. Следующие три оператора сдвигают биты влево на указанное число разрядов, причем сдвиг битов влево заполняет пустые позиции нулями. Пример использования этих операторов приведен в табл. 2.6 и листинге 2.10. Таблица 2.6. Операторы сдвигов битов  
А В А/В А&В А^В ~A
           
           
           
           

 

 

Листинг 2.10.
Пример использования операторов сдвигов битов

class Example
{
public static void main (String args[])
{
int a=3, b=4, c=5;
int d = a * b;
System.out.println (d);
d = a | c;
System.out.println (d);
d &= a;
System.out.println (d);
}
}

 

В Java также поддерживаются и логические операторы, представленные в табл. 2.7.

 

Таблица 2.7. Логические операторы

Оператор Описание
= = Равно
!= Не равно
< Меньше
< = Меньше или равно
> Больше
> = Больше или равно
& Логическое и
| Логическое или
^ Логическое исключающее или
! Отрицание
&& Условное и
| | Условное или
&=, |=, ^= Присваивание с аналогичным оператором

 

Первые шесть операторов называются операторами сравнения. Они позволяют сравнивать числа и возвращают либо значение true, либо — false. Последующие четыре оператора работают с данным типа boolean, но по работе схожи с аналогичными битовыми операторами (только надо заменить бит 0 на false, а бит 1 — на true).

Следующие два оператора используются для двух условий сразу, т.е. указаны два условия и между ними ставится оператор "условное И". Если они оба будут равны true, то выводится значение true; если хотя бы одно из них будет false, то итог будет false.

Оператор "условное или" будет возвращать значение true, если хотя бы одно из условий будет true. Они обычно используются в конструкции if (об этом мы будем говорить в следующей главе). Пример использования всех этих операторов представлен в листинге 2.11.

Листинг 2.11.
Пример использования логических операторов

class Example
{
public static void main (String args[])
{
int a = 10, b=15, c=20;
boolean b1 = a!= b;
boolean b2 = с > a;
boolean b3 = b1 & b2;
boolean b4 = bЗ ^ b1;
if (b1 && b4 = = false) // Если b1!= b4, то:
bЗ = true;
else // Если это не так, то:
b2 = false;
}
}

 

Приведем схему использования логических операторов (табл. 2.8).

Таблица 2.8. Значения логических операторов для двух переменных

    A     B     A|B     A&B     A^B     ~A
false false false false false true
true false true false true false
false true true false true true
true true true true false false

№4 If

class IfElse {

public static void main(String args[]) {

int month = 4;

String season;

if (month == 12 || month == 1 || month == 2) {

season = "Winter";

}

else if (month ==3 || month == 4 || month == 5) {

season = "Spring";

}

else if (month == 6 || month == 7 || month == 8) {

season = "Summer";

}

else if (month == 9 || month == 10 || month == 11) {

season = "Autumn";

}

else {season = "Bogus Month";}

System.out.println("April is in the " + season + ".");

}

}

№5
Инициализация и итерация необязательны. Ниже приведен пример цикла while для печати десяти строк.

class WhileDemo {

public static void main(String args[]) {

int n = 10;

while (n > 0) {

System.out.println("tick " + n);

n--;

}

} }

do-while

Иногда возникает потребность выполнить тело цикла по крайней мере один раз - даже в том случае, когда логическое выражение с самого начала принимает значение false. Для таких случаев в Java используется циклическая конструкция do-while. Ее общая форма записи такова:

[ инициализация; ] do { тело; [итерация;] } while (завершение);

В следующем примере тело цикла выполняется до первой проверки условия завершения. Это позволяет совместить код итерации с условием завершения:

class DoWhile {

public static void main(String args[]) {

int n = 10;

do {

System.out.println("tick " + n);

} while (--n > 0);

} }

№ 6 for

class Months {

static String months[] = {

"January", "February", "March", "April",

"May", "June", "July", "August", "September",

"October", "November", "December" };

static int monthdays[] = { 31, 28, 31, 30, 31,

30, 31, 31, 30, 31, 30, 31 };

static String spring = "spring";

static String summer = "summer";

static String autumn = "autumn";

static String winter = "winter";

static String seasons[] = { winter, winter, spring,

spring, spring, summer, summer,

summer, autumn, autumn, autumn,

winter };

public static void main(String args[]) {

for (int month = 0; month < 12; month++) {

System.out.println(months[month] + " is a " +

seasons[month] + " month with " + monthdays[month] + " days.");

} } }

№7 Оператор передачи управления switch-case

class SwitchSeason { public static void main(String args[]) {

int month = 4;

String season;

switch (month) {

case 12: // FALLSTHROUGH

case 1: // FALLSTHROUGH

case 2:

season = "Winter";

break;

case 3: // FALLSTHROUGH

case 4: // FALLSTHROUGH

case 5:

season = "Spring";

break;

case 6: // FALLSTHROUGH

case 7: // FALLSTHROUGH

case 8:

season = "Summer";

break;

case 9: // FALLSTHROUGH

case 10: // FALLSTHROUGH

case 11:

season = "Autumn";

break;

default:

season = "Bogus Month";

}

System.out.println("April is in the " + season + ".");

}

}

№8 Массивы элементов базовых типов

 

 

Файл DoubleArrayInit.java

class DoubleArrayInit

{

public static void main (String args [])

{

double[] db = {1.25d, 2.2d, 3.2d};

for (int i=0; i<db.length; i++) System.out.println(db[i]);

}

}

 

Файл FloatArrayInit.java

class FloatArrayInit

{

public static void main (String args [])

{

float[] ft = {1.25f, 2.2f, 3.2f};

for (int i=0; i<ft.length; i++) System.out.println(ft[i]);

}

}

 

class SBLength

{

public static void main (String args [])

{

StringBuffer sb[] = {new StringBuffer("First"),

new StringBuffer("Second"),

new StringBuffer("Third")};

for(int i=0; i<sb.length; i++)

{

System.out.println("sb["+i+"]="+sb[i]);

}

System.out.println("Elements quantity of array=" + sb.length);

System.out.println("Second element=" + sb[1]);

System.out.println("Symbols quantity in second element=" + sb[1].length());

}

}

 

 

№9 Массивы массивов

Есть такое понятие, как многомерные массивы. В этом случае элементом одного массива является другой массив. Рассмотрим многомерные массивы на примере двумерных

№10 Класс Math

Класс Math содержит набор математических функций, часто оказывающихся не­обходимыми при решении разных задач.
Чтобы извлечь квадратный корень из числа, применяют метод sqrt.
double х = 4;
double у = Math.sqrt(х);
System.out.println(у); // Печатает число 2.0.

 

Между методами println и sqrt есть небольшая разница. Метод println дей­ствует на объект System, out, имея второй параметр у — число, подлежащее вы­воду. (Напомним, что out — это объект, определенный в классе System и пред­ставляющий собой стандартное устройство вывода.)

В то же время метод sqrt в классе Math не работает ни с одним объектом. Он имеет единственный параметр х — число, из которого нужно извлечь корень. Такие методы называются статиче­скими.

 

В языке Java нет оператора возведения в степень: для этого нужно использовать метод pow из класса Math.

Оператор
double у = Math.pow(x,a);
присваивает переменной у значение переменной х, возведенное в степень а.

Оба параметра метода pow, а также возвращаемое им значение имеют тип double.

Класс Math содержит обычные тригонометрические функции:
Math.sin
Math.cos
Math.tan
Math.atan
Math.atan2

 

Кроме этого, в него включены экспоненциальная и обратная к ней логарифмиче­ская функции (натуральный логарифм):
Math.exp
Math.log

 

В классе определены также две константы
Math.PI
Math.E,
обозначающие аппроксимации чисел Пи и е.

Для повышения своей производительности функции в классе Math используют про­граммы из встроенного модуля для вычислений с плавающей точкой.
Если точность вычислений важнее скорости их выполнения, используйте класс strictMath.
Он реализует алгоритмы из библиотеки "Freely Distributable Math Library" ("Свободно распространяемая библиотека математических функций") fdlibm, гарантирующей идентичность результатов на всех платформах.

Исходные тексты программ, реали­зующих эти алгоритмы, можно найти на web-странице https://www.netlib.org/fdlibm/index.html. (В библиотеке fdlibm дается несколько определений каждой функции, класс StrictMath следует версии IEEE754, имена функций в которой на­чинаются с буквы "е".)

 

 

Преобразования числовых типов

Часто возникает необходимость преобразовать один числовой тип в другой.

На рис. 3.1 показаны разрешенные преобразования.

Шесть черных стрелок на рис. 3.1 обозначают преобразования, которые выпол­няются без потери информации. Три серые стрелки означают преобразования, при которых может произойти потеря точности. Например, количество цифр в большом целом числе 123456789 превышает количество цифр, которое может быть представ­лено типом float.
Число, преобразованное в тип float, имеет правильную величи­ну, но несколько меньшую точность.

int n = 123456789;
float f = n; // Число n равно 1.23456789268.

 

Рис. 3.1 Разрешенные преобразования числовых типов

 

Если два значения объединяются бинарным оператором (например n+f, где n — целое число, a f — число с плавающей точкой), то перед выполнением операции оба операнда преобразовываются в числа, имеющие одинаковый тип.

Если хотя бы один из операндов имеет тип double, то второй тоже преобразо­вывается в число типа double.

В противном случае, если хотя бы один из операндов имеет тип float, то второй тоже преобразовывается в число типа float.
В противном случае, если хотя бы один из операндов имеет тип long, то второй тоже преобразовывается в число типа long.
В противном случае оба операнда преобразовываются в числа типа int.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту:

Обратная связь