2016-05-22 5 views
-1

Я делал один из моих проектов и не мог действительно работать с моим методом набора. И мой конструктор не работал. Я новичок в классе и нуждаюсь в помощи. это будет большой помощью, если вы, ребята, поможете мне поблагодарить вас.set метод не работает

Мой Класс:

public class date { 
private int day; 
private int month; 
private int year; 
public date() 
{ 
    day  = 1; 
    month = 1; 
    year = 1900; 

} 

Я создал конструктор услышать это, как он идет:

// set constructor 
public date (int a,int b,int c) //(day,month,year) 
{ 

    if (a <1) 
    { 
     day  = 1; 
     a  = day; 
    } 
    if (b<1) 
    { 
     month = 1; 
     b  = month; 
    } 
    if (c<1900) 
    { 
     year = 1900; 
     c  = year; 
    } 
    else 
    { 
     a = day; 
     b = month; 
     c = year; 
    } 
} 

это где я начал устанавливать veribals, как важные мутаторы

// set date 
public void setDay (int a) 
{ 
    if (a <1) 
    { 
     day = 1; 
     a = day; 
    } 
    else 
     a = day; 
} 
// set month 
public void setMonth (int a) 
{ 
    if (a <1) 
    { 
     month = 1; 
     a  = month; 
    } 
    else 
     a  = month; 
} 
// set year 
public void setYear (int a) 
{ 
    if (a <1990) 
    { 
     year = 1990; 
     a  = year; 
    } 
    else 
     a  = year; 
} 

И это, когда я начал писать мои аксессуары

//Accsessors 
public int getDay() 
{ 
    return day; 
} 
public int getMonth() 
{ 
    return month; 
} 
public int getYear() 
{ 
    return year; 
} 



} 

мой основной класс является:

public class checkDate { 
public static void main (String [] args) 
{ 
    date year1 = new date(); 
    date year2 = new date (21,3,1995); 

    year1.setDay(13); 
    year1.setMonth(12); 
    year1.setYear(2010); 

    System.out.println(year1.getDay()); 
    System.out.println(year1.getYear()); 
    System.out.println(year2.getYear()); 
    } 

} 

Выход:

Я пытался проверить все, что я даже пытался изменить значение, но ничего не работает единственное, что я получаю 1 и 1900

+1

'а = день;' - что это достижение? –

+2

Я бы порекомендовал вам прочитать учебник о Java-классах, getter и seters и прочитать об условных операторах. –

+0

Ваши сеттеры будут принимать номера ниже 1 и 1900 соответственно. Вы должны переписать его, чтобы принять любое числовое значение. –

ответ

2

Многие из операторов присваивания являются назад. Выражение справа от равных присваивается переменной слева. Вот как они должны выглядеть:

public date(int a, int b, int c) { 
    if (a < 1) 
     a = 1; 
    if (b < 1) 
     b = 1; 
    if (c < 1900) 
     c = 1900; 
    day = a; 
    month = b; 
    year = c; 
} 

У сеттеров есть аналогичная проблема. Не назначайте параметр, назначайте переменную экземпляра.

public void setDay(int a) { 
    if (a < 1) 
     a = 1; 
    day = a; 
} 
public void setMonth(int a) { 
    if (a < 1) 
     a = 1; 
    month = a; 
} 
public void setYear(int a) { 
    if (a < 1990) 
     a = 1990; 
    year = a; 
} 

Примечание: Для более читаемого кода, использовать лучшие имена параметров. Вместо повторного использования a, возможно, вы должны использовать d, m или y в зависимости от установщика. Кроме того, типичные соглашения об именах Java всегда используют первую букву имен классов, поэтому вы должны использовать Date вместо date.

+0

OMG спасибо, много, теперь это работает. Благодарю вас, что вы живая заставка. –

0

Вы устанавливаете только день и месяц, когда они меньше 1, а год, когда он меньше 1990 года. Вероятно, вы должны перевернуть эти «<» в «>».

0

Проблема заключается в ваших переменных назначениях. Вы могли бы конденсироваться код, как это, с помощью ternary operator:

public class Date{ 

    private int day; 
    private int month; 
    private int year; 

    public Date(int d, int m, int y){ 
    day = d<1 ? 1 : d; 
    month = m<1||m>12 ? 1 : m; 
    year = y<1900 ? 1990 : y; 
    } 

    public int getDay(){ 
    return day; 
    } 
    ... 
    public void setDay(int d){ 
    day = d<1 ? 1 : d; 
    } 
    ... 
} 
+0

Правильно, тройной оператор немного для программиста-новичка. –

Смежные вопросы