Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
- Пакет `ru.mentee.power` содержит:
- `ru.mentee.power.HelloWorld.java` - программа для вывода приветствия
- `ru.mentee.power.HelloGit.java` - простой пример работы с Git
- `ru.mentee.power.DataTypeBoundaries.java` - демонстрация границ примитивных типов в java
- `ru.mentee.power.DataTypesInAction.java` - демонстрация явного и неявного преобразования примитивных типов в java
- `ru.mentee.power.SmartCalculator.java` - пример калькулятора, который работает с разными типами и приводит к нужным во избежание потери данных
- `ru.mentee.power.TypePuzzle.java` - примеры неявного поведения примитивных типов с объяснениями
- Пакет `ru.mentee.power.variables` содержит:
- `ru.mentee.power.variables.PersonalCard` - пример объявления и вывода переменных разного типа
- `ru.mentee.power.variables.TypeCalculator` - примеры конвертации числовых типов
Expand Down
27 changes: 27 additions & 0 deletions src/ru/mentee/power/CurrencyConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package ru.mentee.power;

public class CurrencyConverter {
public static void main(String[] args) {
final double usdExchangeRate = 80.85;
final double eurExchangeRate = 93.92;
final double cnyExchangeRate = 11.28;

double usdValue = 1000;
double eurValue = 800;
double cnyValue = 150.3;

System.out.println("Курсы валют:");
System.out.printf("1 USD = %f RUB\n", usdExchangeRate);
System.out.printf("1 EUR = %f RUB\n", eurExchangeRate);
System.out.printf("1 CNY = %f RUB\n", cnyExchangeRate);
System.out.print("\n");
System.out.println("Конвертация:");
System.out.printf("%f USD = %f RUB\n", usdValue, usdExchangeRate * usdValue);
System.out.printf("%f EUR = %f RUB\n", usdValue, eurExchangeRate * eurValue);
System.out.printf("%f CNY = %f RUB\n", usdValue, cnyExchangeRate * cnyValue);
System.out.println("Демонстрация проблемы точности с double:");

System.out.printf("0.3 + 0.4 == %.10f", 0.3f + 0.4f);
System.out.printf("(0.1 + 0.2) == 0.3 ? %b", 0.1 + 0.2 == 0.3);
}
}
15 changes: 15 additions & 0 deletions src/ru/mentee/power/DataTypeBoundaries.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ru.mentee.power;

public class DataTypeBoundaries {
public static void main(String[] args) {
System.out.printf("Byte minimum = %d, Byte maximum = %d\n", Byte.MIN_VALUE, Byte.MAX_VALUE);
System.out.printf("Short minimum = %d, Short maximum = %d\n", Short.MIN_VALUE, Short.MAX_VALUE);
System.out.printf("Integer minimum = %d, Integer maximum = %d\n", Integer.MIN_VALUE, Integer.MAX_VALUE);
System.out.printf("Long minimum = %d, Long maximum = %d\n", Long.MIN_VALUE, Long.MAX_VALUE);
System.out.printf("Float minimum = %f, Float maximum = %f\n", Float.MIN_VALUE, Float.MAX_VALUE);
System.out.printf("Double minimum = %f, Double maximum = %f\n", Double.MIN_VALUE, Double.MAX_VALUE);

short testValue = Short.MAX_VALUE;
System.out.printf("Short type overflow when adding 1 to max value -> %d + 1 = %d", testValue, (short) (testValue + 1) );
}
}
35 changes: 35 additions & 0 deletions src/ru/mentee/power/DataTypesInAction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package ru.mentee.power;

public class DataTypesInAction {
public static void main(String[] args) {
int intNum1 = 29;
int intNum2 = 5;
int intNum3 = 74;
short shortNum = 250;
double doubleNum = 3.3;
float floatNum = 4.5f;
byte byteNum1 = 70;
byte byteNum2 = 68;

System.out.println("Целочисленное деление:");
System.out.printf("%d / %d = %d\n", intNum1, intNum2, intNum1 / intNum2);
System.out.println("Деление с плавающей точкой:");
System.out.printf("%d / %f = %f\n", intNum1, doubleNum, intNum1 / doubleNum);
System.out.println("Явное приведение типов:");
System.out.printf("float %f к int %d - отбрасывание дробной части\n", floatNum, (int) floatNum);
System.out.printf("int %d к char %c - конвертация в символ с таким же кодом\n", intNum3, (char) intNum3);
System.out.printf("short %d к byte %d - сужение типа\n", shortNum, (byte) shortNum);
System.out.println("Автоматическое повышение типа:");
System.out.printf("byte + byte = int: %d + %d = %d\n", byteNum1, byteNum2, byteNum1 + byteNum2);
System.out.printf("int + double = double: %d + %f = %f\n", intNum1, doubleNum, intNum1 + doubleNum);
System.out.println("Операции с boolean:");
System.out.printf("false && false = %b\n", false && false);
System.out.printf("false && true = %b\n", false && true);
System.out.printf("true || false = %b\n", true || false);
System.out.println("Работа с символами:");
System.out.printf("Код символа 'K' = %d\n", (int) 'K');
System.out.printf("Символ кода 78 = %c\n", (char) 78);
System.out.printf("'K' + 5 = %c\n", 'K' + 5);

}
}
32 changes: 32 additions & 0 deletions src/ru/mentee/power/SmartCalculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package ru.mentee.power;

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

// int + double автоматически приводит результат в double
System.out.printf("Сложение: 213 + 111.5 = %.2f - double\n", 213 + 115.5);
// int - int оставляют тип int
System.out.printf("Вычитание: 99 - 9 = %d - int\n", 99 - 9);
// int * double автоматически приводит результат в double
System.out.printf("Умножение: 12 * 2.5 = %.2f - double\n", 12 * 2.5);
// int / int оставляет тип int и отбрасывает остаток, но мы его сохраняем с помощью кастинга
System.out.printf("Деление: 100 / 11 = %.2f - double\n", (double) 100 / 11);
// int / int оставляет тип int, остаток отброшен
System.out.printf("Деление целочисленное: 75 / 15 = %d - int\n", 75 / 15);
// int % int возвращает нам только остаток от деления
System.out.printf("Остаток от деления: 80 / 15 = %d - int\n", 80 % 15);
// Метод возведения в степень принимает и возвращает только тип double
System.out.printf("Возведение в степень: 11 ^ 5 = %.3f\n", Math.pow(11, 5));
System.out.println("Обработка особых случаев:");
// Выводим результат деления переменной типа double на 0
System.out.println("Попытка деления на ноль (для double): " + 2.0 / 0);
// Пытаемся поделить на ноль, ловим исключение и выводим его сообщение
try {
int a = 2 / 0;
} catch (Exception e) {
System.out.println("Попытка деления на ноль (для int): " + e.getMessage());
}


}
}
22 changes: 22 additions & 0 deletions src/ru/mentee/power/TypePuzzle.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package ru.mentee.power;

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

System.out.println("1) Сравнение двух строк с одинаковым содержанием:");
System.out.println("Первую строку создаём написанием константы, вторую создаём как новый объект через new");
String helloString1 = "hello";
String helloString2 = new String("hello");
System.out.printf("Содержание первой строки - %s\nСодержание второй строки - %s\n", helloString1, helloString2);
System.out.println("Сравниваем строки через оператор '==' -> " + (helloString1 == helloString2));
System.out.println("Решение - использовать метод equals(), который сравнивает содержание, а не ссылки");

System.out.println("2) Автоматическая конвертация чисел в строку при конкатенации:");
System.out.println("Если мы хотим сложить два числа в формате 2 + 2 и присоединить их к строке, то получим неожиданный результат");
System.out.println("Сумма 2 + 2 = " + 2 + 2);
System.out.println("В данном случае, сложения не произошло, а каждое число просто сконкатенировалось со строкой по отдельности");
System.out.println("Исправляется данная ошибка с помощью вынесения арифметических операций в скобки");
System.out.println("Сумма (2 + 2) = " + (2 + 2));

}
}