Я не вижу нигде в вашем коде, где вы вызываете методы setDay, setMonth или setYear, поэтому я ожидаю, что вызов toUniversalStringTime всегда будет печатать
"The date using a default constructor 111 \n"
Затем после этого вызова вы снова печатаете его вручную, используя значения для y, m и d
"The date I created is 200056 \n"
Вам нужно вызвать методы set для объекта d1 после создания или передать параметры конструктору для их установки, например,
d1.setYear(y);
d1.setMonth(m);
d1.setDay(d);
но, пожалуйста, обратите внимание на некоторые другие комментарии, которые были сделаны в отношении рефакторинга вашего кода, потому что, как уже упоминалось, каждый из ваших методов установки имеет фундаментальные недостатки, которые необходимо исправить в первую очередь.
Другие общие примечания к вашему коду:
В вашем методе setYear вы используете значение y, чтобы обновить переменную года объекта, но во втором, если:
if (y > 2011) {
System.out.println("That year hasn't happened yet!");
y = 2011;
}
вы на самом деле устанавливаете y
на 2011, а не year
, так что это не будет иметь никакого эффекта.
По какой-то причине в вашем методе setMonth вы на самом деле не устанавливаете месяц, а просто проверяете значение, которое передается, т. Е. Если значение не между 1 и 12, вы возвращаете 1. Таким образом, код не сопоставьте название метода, и вы должны изменить один или другой.
Ваш метод setDay такой же, как setMonth, в том смысле, что он фактически не устанавливает день, а только проверяет его. Но что еще хуже, это то, что вызов метода setDay сильно зависит от уже заданного месяца и года, поскольку вы используете переменные month
и year
, чтобы определить, действительно ли день действителен. Это означает, что setDay должен вызываться только после setMonth и setYear, в противном случае вы всегда по умолчанию будете проверять против января 0001 (поскольку месяц и год по умолчанию установлены в 1).