Синтаксис Java. Типы данных. Целые числа

 

Типы данных. Целые числа
Типы данных. Целые числа


Решение домашнего задания из статьи: Основные конструкции - циклы и условия

Создаём новый проект, назовём WhatToEat, папка srс, new,javaClass, WhatToEat

  • count [counted|counted] 

пересчитывать, считать, складывать [скла́дывал|скла́дывал бы]  принимать во внимание

  • OfMoney
public class WhatToEat {
public static void main(String[] args) {
int countOfMoney = 200;
if (countOfMoney >= 500) {
System.out.println("Пицца");
} else if (countOfMoney >= 300) {
System.out.println("Шаурма");
} else if (countOfMoney >= 100) {
System.out.println("Гамбургер");
} else {
System.out.println("Доширак");
}
}
}

Гамбургер

Process finished with exit code 0

В случае ошибки jdk 11 is missing (jdk 11 отсутствует) в IDE , установить JDK.

SHAREWOOD - это братство разбойников-единомышленников, стремящихся к повышению своих профессиональных навыков или освоению новых.
SHAREWOOD - это братство разбойников-единомышленников, стремящихся к повышению своих профессиональных навыков или освоению новых.

В этой статье продолжим изучать типы данных Java в предыдущих статьях мы уже изучили тип int

Всего в Java восемь примитивных или простых типов, их можно разделить на 4 категории.

 1. Целые числа

  • byte
 Тип byte занимает 1 байт и может хранить в себе числа от -128 до 127. Этот тип удобно использовать, когда удобно работать с файлами из интернета или из файлов. Когда нам нужно получить эти данные, мы читаем эти файлы по-байтово и храним значение в переменной типа byte.
  • short
 Занимает 2 байта, и может хранить значение от -32768 до 32767. 
  • int
 4 байта, может хранить от 2147483648 до 2147483647
  • long
Все они представляют собой целое число. Отличаются по кол-ву значений, которые могут в себе хранить, соответственно по объему занимаемой памяти.

 Используется в случае если нужно хранить слишком большие значения, которые слишком велики для типа int, используем тип long он занимает 8 байт может принимать такое значение 9223372036854775808 до 9223372036854775807.

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

byte number;

short number = 3500;

int number = 950000;

long number = 999999999999;

Решим небольшую задачу!

Кол-во дней 1000, скорость света 300000км.сек, какое расстояние пройдёт свет за это время?

Дана скорость света, которая составляет примерно 300000км.сек и дано кол-во дней. Нужно написать программу, которая считает и выводит кол-во километров, которое прошёл свет за эти дни.

А какую переменную использовать для сохранения наиболее лучшего результата?! Переходим в код для создания нового проекта! 

File,NewProject,Variable (переменная)
src,New,JavaClass,Var

Создаём точку входа в программу psvm и добавляем переменные. В первой будет храниться количество дней, для неё достаточно типа int.
 int days =1000;

Во второй будем хранить скорость света, которая является постоянной величиной, и для неё та-же достаточно типа int

 int speed = 300000;

Так как скорость света это 300тыс.км.сек., то нам нужно из кол-ва дней получить количество секунд. Число будет достаточно больше. будем использовать тип long

long seconds = days (кол.во дней *кол.во часов в сутках) * 24 ( *на кол.во минут в часах) * 60 ( на кол.во сек. в минутах)  *  60;

Теперь можем получить расстояние. Что бы получить расстояние, нужно скорость умножить на время, значение будет очень большим, поэтому будем использовать тип long.

long distance = speed * seconds;

Выведем результат: sout (distance)

public class Var {
public static void main(String[] args) {
int days = 1000;
int speed 300000;
long seconds = days * 24 * 60 * 60;
long distance = speed * seconds;
System.out.println(distance);
}
}
25920000000000

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

Попробуем изменить значение переменной на int

int distance = speed * seconds;

будет высвечена ошибка: не совместимые типы, требуется int, обнаружен long

Типы данных. Целые числа

Как программа поняла, что данное выражение speed * seconds даёт тип long ?!

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

Давайте посмотрим какие числа использовались в самом выражении.

Переменная speed является типом int

Типы данных. Целые числа

Переменная seconds является типом long 

Типы данных. Целые числа

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

int seconds = days * 24 * 60 * 60;

В данном случае количество секунд будет составлять примерно 86000000, а тип int может хранить в себе до 2х.миллиардов. то-есть для переменной int проблем нет и это значение (days * 24 * 60 * 60) она сохраняет без проблем. 

Теперь ошибки нет Run!
-127631360

Приложение выводит ответ, но он точно не правильный, как минимум потому что получилось отрицательное число. Посмотрим почему так получилось. на примере переменной byte

Создадим переменную byte a = (может хранить от 128 до 127) 127;
увеличим на 1, запись будет выглядеть вот так: a += 1;

Выведем на экран sout (a);

Удалим вывод System.out.println(distance);
и запустим приложение!

public class Var {
public static void main(String[] args) {
int days = 1000;
int speed = 300000;
int seconds = days * 24 * 60 * 60;
int distance = speed * seconds;

byte a = 127;
a += 1;
System.out.println(a);
}
}
-128

Так как в переменной byte не могут лежать числа не больше чем 127, то ей будет присвоено минимальное возможное значение -128, если прибавим 2, a += 2;
значение будет  - 127 итд. При увеличении будет расти до 127 и потом начнёт свой отчет с - 128.

То же самое произошло и в нашем примере.  

В результате значение distance получилось очень большим числом которое не влезло в тип int, поэтому значение дошло до 2хмлрд. и начало сначала, с - 2млрд. с лишним, потом опять до 2хмлрдв. итд. в итоге получилось отрицательное число.

Внимание! 
Что если переменной distance присвоить тип long long distance = speed * seconds;

public class Var {
public static void main(String[] args) {
int days = 1000;
int speed = 300000;
int seconds = days * 24 * 60 * 60;
long distance = speed * seconds;
System.out.println(distance);
}
}
Run!
-127631360 Всё равно отрицательный!

Общий результат приводится к самому большому типу используемому в выражении.

В данном случае используется переменная speed, тип int и переменная seconds. Соответственно значение всего этого выражения будет приведено к типу int, который не может хранить настолько большое значение, и поэтому получается отрицательный результат.

Но почему не возникает ошибка?! 

Почему к переменной типа long, можем присвоить значение типа int ?! - Это называется автоматическое приведение типов. Так как тип int занимает меньше места, чем тип long, то программа автоматически преобразует результат в тип long.

То же самое произойдёт, если будет byte преобразовывать в int
byte a = 10;
int b = a;
ошибок нет!
System.out.println(b);
run! 
10

byte занимает меньше места, и соответственно проблем не возникает, тип byte без проблем преобразуется в тип int 

public class Var {
public static void main(String[] args) {
int a = 15;
byte b = a;
}
}

Будет ошибка! Она появляется автоматически, так как в java нету приведения типа к более мелкому типу.

Но если нам всё равно нужно привести переменную к типу byte, можно сделать это в ручную, тогда ответственность за то что значение переменной int поместиться в переменную byte ложится на нас!

Перед переменной ставим круглые скобки и пишем тип к которому хотим привести byte b = (byte) a; 
sout(b);
public class Var {
public static void main(String[] args) {
int a = 15;
byte b = (byte) a;
System.out.println(b);
}
}
Run!
15

На этом всё!



2. Дробные, то-есть числа с плавающей точкой
  • float
  • double
 3. Символы 
  • char (используется с буквами или цифрами)
 4. Логические
  • boolean (который может хранить в себе одно из двух значений true или false)

Продолжение в след. статье: Типы данных. Примитивные типы


Отправить комментарий

Новые Старые
FL.ru – фриланс сайт удаленной работы. Поиск удаленной работы, фрилансеры.