2016-05-22 7 views
-1

私のプロジェクトの1つを行っていて、実際に設定した方法を実行できませんでした。私のセットコンストラクタは動作していませんでした。私はクラスで新しく、助けが必要です。皆さんに感謝していただければ幸いです。設定方法が機能していません

私のクラスである:

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とsetterについてのチュートリアルを読んで、条件文について読むことをお勧めします。 –

+0

あなたのセッターはそれぞれ1と1900より小さい数字を受け入れます。任意の数値を受け入れるように書き直す必要があります。 –

答えて

2

で働く変更しようとしたすべてのものをチェックしてみました。 equalsの右側の式は、左側の変数に割り当てられます。代わりに次のようにしてください。

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

正しいですが、三元演算子は初心者のプログラマーにはちょっとです。 –

関連する問題