Почему этот конструктор не дает мне правильный ответ - PullRequest
0 голосов
/ 27 февраля 2019

Я какое-то время отказался от программирования, и я хочу понять, почему этот класс не дает мне правильного ответа, который я ожидаю получить:

public class Date
{
    private int _day;
    private int _month;
    private int _year;
    public Date(int day, int month, int year)
    {
        _day=day;
        _month=month;
        _year=year;
        if((day<1||day>31)&&(month<1||month>12)&&(year<1000||year>9999))
            {
                _day=26;
                _month=2;
                _year=2019;
            }
        }
    public String toString()
    {
        return _day+"/"+_month+"/"+_year;
    }
    public static void main(String[]args)
    {
        Date test= new Date(5,13,1999);
        System.out.println(test.toString());
    }
}

Когда я вставляю значения в «тест»"объект как (32,5,1999) распечатывается 26.2.2019.Когда я вставляю значения как (5,14,1999), он печатает 5.14.1999, а когда я вставляю значения как (5,6900), он печатает как 5.8.900.Почему я не получаю значения по умолчанию, которые я установил в конструкторе, когда пользователь вводит недопустимое значение (26.2.2019).Спасибо за ваши ответы :)

Ответы [ 5 ]

0 голосов
/ 27 февраля 2019

Если вы хотите заменить значение по умолчанию, если дата, месяц и год отдельно, используйте, как показано ниже

if(day<1||day>31) _day=26;
if(month<1||month>12) _month=2;
if(year<1000||year>9999)_year=2019;

Если вы хотите обновить дату по умолчанию, даже если одна из записей неверна, используйте

if((day<1||day>31)||(month<1||month>12)||(year<1000||year>9999))
{
  _day=26;
  _month=2;
  _year=2019;
}
0 голосов
/ 27 февраля 2019

Поскольку вы ушли от программирования, вам следует проверить Операторы Java .Те, с кем у вас проблемы, являются логическими операторами.

Надеюсь, это поможет!:)

0 голосов
/ 27 февраля 2019

Ваш оператор if проверяет, являются ли "дата, месяц и год" неправильными одновременно, чтобы дать результат по умолчанию.Вы должны использовать "||"вместо "&".

0 голосов
/ 27 февраля 2019

Проблема в операторе if (...), который выдает значение по умолчанию, только если любой параметр неверен.

Например,

(32,5,1999) becomes (TRUE && FALSE && FALSE) = FALSE
(5,6,900) becomes (FALSE && FALSE && TRUE) = FALSE

Вы можете изменить свое заявление на

if(day<1||day>31 || month<1||month>12 || year<1000||year>9999){
...
}

, чтобы получить дату по умолчанию в случае ошибки

0 голосов
/ 27 февраля 2019

Это условие:

if((day<1||day>31)&&(month<1||month>12)&&(year<1000||year>9999))
            {
                _day=26;
                _month=2;
                _year=2019;
            }

будет выполняться только в том случае, если все три заданных вами условия верны.

Что означает следующее: input - 26.2.2019

(day<1||day>31) = **false**
(month<1||month>12) = **false**
(year<1000||year>9999) = **false**
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...