Оператор деления по модулю - оператор
mod
, обозначается символом %
.
Этот оператор возвращает остаток от деления первого операнда на второй.
Оператор mod
"%
" в Java работает не только с целыми (такие как: byte/int/short/long
), но и с плавающей точкой (такие как: float/double
) числами\типами.
Приведенная ниже программа иллюстрирует работу этого оператора:
package com.l2cccp.work;
public class Mod
{
public static void main(String args[])
{
int i = 17; // Целые
double d = 17.3; // С плавающей точкой
System.out.println("i mod 10 = " + i % 10);
System.out.println("d mod 10 = " + d % 10);
}
}
Выполнив эту программу, вы получите следующий результат:
i mod 10 = 7
d mod 10 = 7.300000000000001
С работой данного оператора разобрались, но как же его использовать. Как вариант для склонения слов в зависимости от количества.
Так как я работаю разработчиком эмулятора игры на java для меня очень важно чтобы многие слова в сообщениях склонялись.
К примеру:
- Вы играете уже 1 день.
- Вы играете уже 2 дня.
- Вы играете уже 5 дней.
package com.l2cccp.work;
public class Mod
{
public static void main(String args[])
{
int[] day= new int[] { 1, 2, 5 };
System.out.println("Вы играете уже " + day[0] + " " + declension(day[0]));
System.out.println("Вы играете уже " + day[1] + " " + declension(day[1]));
System.out.println("Вы играете уже " + day[2] + " " + declension(day[2]));
}
public static String declension(int count)
{
String one = "день";
String two = "дня";
String five = "дней";
if(count > 100)
count %= 100;
if(count > 20)
count %= 10;
switch(count)
{
case 1:
return one;
case 2:
case 3:
case 4:
return two;
default:
return five;
}
}
}
Выполнив эту программу, вы получите следующий результат:
Вы играете уже 1 день
Вы играете уже 2 дня
Вы играете уже 5 дней
Все работает так как нам нужно, но что если нам потребуется получить несколько склонении в одном результате?
К примеру:
- Вы играете уже 1 день и 1 час.
- Вы играете уже 2 дня и 4 часа.
- Вы играете уже 5 дней 9 часов.
package com.l2cccp.work;
public class Mod
{
public static void main(String args[])
{
int[] day = new int[] { 1, 2, 5 };
int[] hour = new int[] { 1, 4, 9 };
System.out.println("Вы играете уже " + day[0] + " " + declension(day[0], "Days") + " и " + hour[0] + " " + declension(hour[0], "Hour"));
System.out.println("Вы играете уже " + day[1] + " " + declension(day[1], "Days") + " и " + hour[1] + " " + declension(hour[1], "Hour"));
System.out.println("Вы играете уже " + day[2] + " " + declension(day[2], "Days") + " и " + hour[2] + " " + declension(hour[2], "Hour"));
}
public static String declension(int count, String type)
{
String one = "";
String two = "";
String five = "";
if(type.equals("Days"))
{
one = "день";
two = "дня";
five = "дней";
}
else if(type.equals("Hour"))
{
one = "час";
two = "часа";
five = "часов";
}
if(count > 100)
count %= 100;
if(count > 20)
count %= 10;
switch(count)
{
case 1:
return one;
case 2:
case 3:
case 4:
return two;
default:
return five;
}
}
}
Выполнив эту программу, вы получите следующий результат:
Вы играете уже 1 день и 1 час
Вы играете уже 2 дня и 4 часа
Вы играете уже 5 дней и 9 часов
Так как наш метод описан как паблик "public
" то вызвать его можно легко из любого пакета:
Mod.declension(count, type);
Собственно вот и все, надеюсь кому то это будет полезно.
Удачи в освоении Java языка.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ