[Java] getters/setters/toString(), задание про рациональную дробь
Видеозаписи урока:
Ниже приведен пример класса описывающего натуральное число:
public class NaturalValue {
int value;
NaturalValue(int value) {
if (value < 1) {
this.value = 1;
} else {
this.value = value;
}
}
NaturalValue() {
this.value = 1;
}
int getValue() {
// это так называемый getter, в java принято извне (из main) ВЕЖЛИВО узнавать значения полей
// т.е. через такие (тривиальные) функции
// getter от слова get = получить = узнать значение поля (соответственно тип результата = типу поля)
// называется он всегда getSomeFieldName где SomeFieldName - название поля (с большой буквы)
return value;
}
void setValue(int value) {
// это так называемый setter, в java принято извне (из main) ВЕЖЛИВО МЕНЯТЬ значения полей
// т.е. через такие (тривиальные) функции
// setter от слова set = установить значение поля (соответственно результата нет - void)
// называется он всегда setSomeFieldName где SomeFieldName - название поля (с большой буквы)
this.value = value;
// в частности такой способ позволяет проконтролировать что за значение нам подсунили и поправить его:
if (value < 1) {
this.value = 1;
} else {
this.value = value;
}
}
// @Override - это указание что не мы не просто объявляем новый метод,
// а ПЕРЕОПРЕДЕЛЯЕМ метод который есть в более базовом классе
// в Java во всех классах есть toString(), именно он определяет что будет выведено
// если подставить объект x в System.out.println(x);
// поэтому ПЕРЕОПРЕДЕЛИВ этот метод - мы явно скажем как преобразовать объект в строку
// т.е. как представить объект в приятном человеческому глазу виде
@Override
public String toString() {
return "value=" + this.value + "";
}
}
Поиск наибольшего общего делителя
Как найти НОД двух чисел чтобы сократить рациональную дробь? Проще всего это сделать через Алгоритм Евклида:
1) Большее число делим на меньшее.
2) Если делится без остатка, то меньшее число и есть НОД (следует выйти из цикла).
3) Если есть остаток, то большее число заменяем на остаток от деления.
4) Переходим к пункту 1.
Задание
В https://mdl.sch239.net/login/index.php выполнить задание про создание класса описывающего рациональную дробь.