Skip to content

Commit 9a4ed47

Browse files
authored
MP-21: added new classes, updated README.md (#5)
1 parent 77368a8 commit 9a4ed47

6 files changed

Lines changed: 135 additions & 0 deletions

File tree

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
- Пакет `ru.mentee.power` содержит:
99
- `ru.mentee.power.HelloWorld.java` - программа для вывода приветствия
1010
- `ru.mentee.power.HelloGit.java` - простой пример работы с Git
11+
- `ru.mentee.power.DataTypeBoundaries.java` - демонстрация границ примитивных типов в java
12+
- `ru.mentee.power.DataTypesInAction.java` - демонстрация явного и неявного преобразования примитивных типов в java
13+
- `ru.mentee.power.SmartCalculator.java` - пример калькулятора, который работает с разными типами и приводит к нужным во избежание потери данных
14+
- `ru.mentee.power.TypePuzzle.java` - примеры неявного поведения примитивных типов с объяснениями
1115
- Пакет `ru.mentee.power.variables` содержит:
1216
- `ru.mentee.power.variables.PersonalCard` - пример объявления и вывода переменных разного типа
1317
- `ru.mentee.power.variables.TypeCalculator` - примеры конвертации числовых типов
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package ru.mentee.power;
2+
3+
public class CurrencyConverter {
4+
public static void main(String[] args) {
5+
final double usdExchangeRate = 80.85;
6+
final double eurExchangeRate = 93.92;
7+
final double cnyExchangeRate = 11.28;
8+
9+
double usdValue = 1000;
10+
double eurValue = 800;
11+
double cnyValue = 150.3;
12+
13+
System.out.println("Курсы валют:");
14+
System.out.printf("1 USD = %f RUB\n", usdExchangeRate);
15+
System.out.printf("1 EUR = %f RUB\n", eurExchangeRate);
16+
System.out.printf("1 CNY = %f RUB\n", cnyExchangeRate);
17+
System.out.print("\n");
18+
System.out.println("Конвертация:");
19+
System.out.printf("%f USD = %f RUB\n", usdValue, usdExchangeRate * usdValue);
20+
System.out.printf("%f EUR = %f RUB\n", usdValue, eurExchangeRate * eurValue);
21+
System.out.printf("%f CNY = %f RUB\n", usdValue, cnyExchangeRate * cnyValue);
22+
System.out.println("Демонстрация проблемы точности с double:");
23+
24+
System.out.printf("0.3 + 0.4 == %.10f", 0.3f + 0.4f);
25+
System.out.printf("(0.1 + 0.2) == 0.3 ? %b", 0.1 + 0.2 == 0.3);
26+
}
27+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package ru.mentee.power;
2+
3+
public class DataTypeBoundaries {
4+
public static void main(String[] args) {
5+
System.out.printf("Byte minimum = %d, Byte maximum = %d\n", Byte.MIN_VALUE, Byte.MAX_VALUE);
6+
System.out.printf("Short minimum = %d, Short maximum = %d\n", Short.MIN_VALUE, Short.MAX_VALUE);
7+
System.out.printf("Integer minimum = %d, Integer maximum = %d\n", Integer.MIN_VALUE, Integer.MAX_VALUE);
8+
System.out.printf("Long minimum = %d, Long maximum = %d\n", Long.MIN_VALUE, Long.MAX_VALUE);
9+
System.out.printf("Float minimum = %f, Float maximum = %f\n", Float.MIN_VALUE, Float.MAX_VALUE);
10+
System.out.printf("Double minimum = %f, Double maximum = %f\n", Double.MIN_VALUE, Double.MAX_VALUE);
11+
12+
short testValue = Short.MAX_VALUE;
13+
System.out.printf("Short type overflow when adding 1 to max value -> %d + 1 = %d", testValue, (short) (testValue + 1) );
14+
}
15+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package ru.mentee.power;
2+
3+
public class DataTypesInAction {
4+
public static void main(String[] args) {
5+
int intNum1 = 29;
6+
int intNum2 = 5;
7+
int intNum3 = 74;
8+
short shortNum = 250;
9+
double doubleNum = 3.3;
10+
float floatNum = 4.5f;
11+
byte byteNum1 = 70;
12+
byte byteNum2 = 68;
13+
14+
System.out.println("Целочисленное деление:");
15+
System.out.printf("%d / %d = %d\n", intNum1, intNum2, intNum1 / intNum2);
16+
System.out.println("Деление с плавающей точкой:");
17+
System.out.printf("%d / %f = %f\n", intNum1, doubleNum, intNum1 / doubleNum);
18+
System.out.println("Явное приведение типов:");
19+
System.out.printf("float %f к int %d - отбрасывание дробной части\n", floatNum, (int) floatNum);
20+
System.out.printf("int %d к char %c - конвертация в символ с таким же кодом\n", intNum3, (char) intNum3);
21+
System.out.printf("short %d к byte %d - сужение типа\n", shortNum, (byte) shortNum);
22+
System.out.println("Автоматическое повышение типа:");
23+
System.out.printf("byte + byte = int: %d + %d = %d\n", byteNum1, byteNum2, byteNum1 + byteNum2);
24+
System.out.printf("int + double = double: %d + %f = %f\n", intNum1, doubleNum, intNum1 + doubleNum);
25+
System.out.println("Операции с boolean:");
26+
System.out.printf("false && false = %b\n", false && false);
27+
System.out.printf("false && true = %b\n", false && true);
28+
System.out.printf("true || false = %b\n", true || false);
29+
System.out.println("Работа с символами:");
30+
System.out.printf("Код символа 'K' = %d\n", (int) 'K');
31+
System.out.printf("Символ кода 78 = %c\n", (char) 78);
32+
System.out.printf("'K' + 5 = %c\n", 'K' + 5);
33+
34+
}
35+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package ru.mentee.power;
2+
3+
public class SmartCalculator {
4+
public static void main(String[] args) {
5+
6+
// int + double автоматически приводит результат в double
7+
System.out.printf("Сложение: 213 + 111.5 = %.2f - double\n", 213 + 115.5);
8+
// int - int оставляют тип int
9+
System.out.printf("Вычитание: 99 - 9 = %d - int\n", 99 - 9);
10+
// int * double автоматически приводит результат в double
11+
System.out.printf("Умножение: 12 * 2.5 = %.2f - double\n", 12 * 2.5);
12+
// int / int оставляет тип int и отбрасывает остаток, но мы его сохраняем с помощью кастинга
13+
System.out.printf("Деление: 100 / 11 = %.2f - double\n", (double) 100 / 11);
14+
// int / int оставляет тип int, остаток отброшен
15+
System.out.printf("Деление целочисленное: 75 / 15 = %d - int\n", 75 / 15);
16+
// int % int возвращает нам только остаток от деления
17+
System.out.printf("Остаток от деления: 80 / 15 = %d - int\n", 80 % 15);
18+
// Метод возведения в степень принимает и возвращает только тип double
19+
System.out.printf("Возведение в степень: 11 ^ 5 = %.3f\n", Math.pow(11, 5));
20+
System.out.println("Обработка особых случаев:");
21+
// Выводим результат деления переменной типа double на 0
22+
System.out.println("Попытка деления на ноль (для double): " + 2.0 / 0);
23+
// Пытаемся поделить на ноль, ловим исключение и выводим его сообщение
24+
try {
25+
int a = 2 / 0;
26+
} catch (Exception e) {
27+
System.out.println("Попытка деления на ноль (для int): " + e.getMessage());
28+
}
29+
30+
31+
}
32+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package ru.mentee.power;
2+
3+
public class TypePuzzle {
4+
public static void main(String[] args) {
5+
6+
System.out.println("1) Сравнение двух строк с одинаковым содержанием:");
7+
System.out.println("Первую строку создаём написанием константы, вторую создаём как новый объект через new");
8+
String helloString1 = "hello";
9+
String helloString2 = new String("hello");
10+
System.out.printf("Содержание первой строки - %s\nСодержание второй строки - %s\n", helloString1, helloString2);
11+
System.out.println("Сравниваем строки через оператор '==' -> " + (helloString1 == helloString2));
12+
System.out.println("Решение - использовать метод equals(), который сравнивает содержание, а не ссылки");
13+
14+
System.out.println("2) Автоматическая конвертация чисел в строку при конкатенации:");
15+
System.out.println("Если мы хотим сложить два числа в формате 2 + 2 и присоединить их к строке, то получим неожиданный результат");
16+
System.out.println("Сумма 2 + 2 = " + 2 + 2);
17+
System.out.println("В данном случае, сложения не произошло, а каждое число просто сконкатенировалось со строкой по отдельности");
18+
System.out.println("Исправляется данная ошибка с помощью вынесения арифметических операций в скобки");
19+
System.out.println("Сумма (2 + 2) = " + (2 + 2));
20+
21+
}
22+
}

0 commit comments

Comments
 (0)