0

ある指示に基づいてプログラム (クラス) をコーディングするように依頼されました。私はほとんどそれを落としたように感じますが、何かばかげたことをしています。INSERT_HYPHEN と入力すると、アクセサー メソッドに「-」が挿入されるように、シンボリック定数にハイフンを追加する方法がわかりません。互換性のない型と表示されています>:( また、ローカル変数 "fullDate" を 'getFullDate' アクセサー メソッドに挿入しようとして、"fullDate = 年 + 月 + 日" を入力すると、「互換性のない型です! おそらくそれは、 accesor メソッドは文字列で、その中に 'ints' を追加しようとしています。これを回避する方法が見つかりません。これが私のコードです。

public class Date
{
public static final int INSERT_ZERO = 0;
public static final char INSET_HYPHEN = -;   //ERROR incompatible types

// instance variables - replace the example below with your own
private int year;
private int month;
private int day;

/**
 * Default constructor
 */
public Date()
{
    setYear (2013);
    setMonth (01);
    setDay (01);
}

/**
 * 
 */
public Date (int whatIsYear, int whatIsMonth, int whatIsDay)
{
    setYear (whatIsYear);
    setMonth (whatIsMonth);
    setDay (whatIsDay);
}

/**
 *@return year
 */
public int getYear()
{
    return year;
}

/**
 *@return month
 */
public int getMonth()
{
    return month;
}

/**
 *@return day
 */
public int getDay()
{
    return day;
}

/**
 *@return 
 */
public String getFullDate()
{
    String fullDate;
    if (whatIsMonth < 10);    // the year, month, and day all give me incompatible types :(
    {
        fullDate = year + INSERT_HYPHEN + INSERT_ZERO + month + INSERT_HYPHEN +  day; 
    }
    if (whatIsDay < 10);
    {
        fullDate = year + INSERT_HYPHEN +  month + INSERT_HYPHEN +  INSERT_ZERO + day;
    }
    else
    {
        fullDate = year + INSERT_HYPHEN + month + INSERT_HYPHEN + day;
    }
    return year + month + day;
}

/**
 * 
 */
public void setYear (int whatIsYear)
{
    if ((whatIsYear >= 1990) && (whatIsYear <= 2013))
    {
        year = whatIsYear;
    }
    else
    {
        year = 2013;
    }
}

/**
 * 
 */
public void setMonth (int whatIsMonth)
{
    if ((whatIsMonth >=  1) && (whatIsMonth <= 12))
    {
        month = whatIsMonth;
    }
    else
    {
        month = 01;
    }
}

/**
 * 
 */
public void setDay (int whatIsDay)
{
    if ((whatIsDay >= 1) && (whatIsDay <= 31))
    {
        day = whatIsDay;
    }
    else
    {
        day = 01;
    }
}

}

もう少し背景があります。私が構築しているこのクラスには、年、月、日を保持する 3 つのフィールドがあります。年は 1900 年から現在の年までの範囲で指定できます。月は 1 から 12 の間で指定できます。日は 1 から 31 までの範囲で指定できます。コードでは「マジック」ナンバーの代わりに記号定数を使用する必要があります。たとえば、 public static final int FIRST_MONTH = 1; です。

デフォルトのコンストラクターは、年を現在の年に、月を最初の月に、日を最初の日に設定します。デフォルト以外のコンストラクターは、各パラメーターをテストします。年パラメーターが許容範囲外の場合、フィールドは現在の年に設定されます。月パラメーターが許容範囲外の場合、フィールドは最初の月に設定されます。day パラメーターが許容範囲外の場合、フィールドは最初の日に設定されます。

各フィールドには、アクセサ メソッドとミューテータ メソッドがあります。3 つのミューテーター メソッドはすべて、パラメーターの有効性をチェックし、有効でない場合は、デフォルト以外のコンストラクターと同じ方法で対応するフィールドを設定します。

これは私が問題を抱えている部分です。「public String getFullDate()」というメソッドを含める必要があります。このメソッドは、YYYY-MM-DD のような形式の日付を含む文字列を返します。例: 2012-01-01。1 桁の月と日は、先行ゼロで埋められます。 "

単なるアイデアであっても、どんな助けでも大歓迎です:)ありがとう。

4

6 に答える 6

6

一重引用符を使用する必要があります。

public static final char INSET_HYPHEN = '-';  
于 2013-02-11T11:54:41.870 に答える
1
    fullDate = String.format("%d-%02d-%02d", year, month, day); 
于 2013-02-11T11:58:22.937 に答える
0
  1. public static final char INSET_HYPHEN = '-';代わりに使用public static final char INSET_HYPHEN = -;- 文字は常にアポストロフィの間に定義する必要があります。
  2. 定数に「INSERT_HYPHEN」という名前を付けるのは意味がありません。定数の考え方は、コード内で見つかった値を後で簡単に変更できるようにすることです。そのため、定数の名前はその値の「ロール」を表す必要があります。たとえば、「SEPARATOR」または「DATE_FORMAT_SEPERATOR」です。
  3. とにかく、値が定数である場合、それは年、月、日のデフォルト値です。
  4. デフォルトのコンストラクターは、年、月、日を受け取るコンストラクターのコードとほとんど同じです。この場合、this(デフォルト引数)を使用してデフォルトから 2 番目を呼び出すのが最善の方法です。
  5. の論理は間違っています。とにかく、汚い仕事getFullDate()を任せた方がずっと良いのです。String.formatまた、 をgetFullDate()返すyear + month + day代わりに、整数である を返しfullDateます。
  6. 混乱を招くかもしれませんが、新しい名前を作成するのではなく、セッターとコンストラクターの引数にターゲット フィールドと同じ名前を付ける方が適切です。2 つのあいまいさを避けるために、 this.[FIELD_NAME] を使用してインスタンスのフィールドを参照します。

このコードは動作するはずです:

public class Date {
    private static final int DEFAULT_YEAR = 2013;
    private static final int DEFAULT_MONTH = 1;
    private static final int DEFAULT_DAY = 1;
    private static final char SEPARATOR = '-';

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

    /**
     * Default constructor
     */
    public Date() {
        this(DEFAULT_YEAR, DEFAULT_MONTH, DEFAULT_DAY);
    }

    /**
     * 
     */
    public Date (int year, int month, int day) {
        setYear(year);
        setMonth(month);
        setDay(day);
    }

    /**
     *@return year
     */
    public int getYear() {
        return year;
    }

    /**
     *@return month
     */
    public int getMonth() {
        return month;
    }

    /**
     *@return day
     */
    public int getDay() {
        return day;
    }

    /**
     *@return 
     */
    public String getFullDate() {
        return String.format("%d%c%02d%c%02d", year, SEPARATOR, month, SEPARATOR, day);
    }

    /**
     * 
     */
    public void setYear (int year)
    {
        this.year = ((year >= 1990) && (year <= DEFAULT_YEAR)) ? year : DEFAULT_YEAR;
    }

    /**
     * 
     */
    public void setMonth (int month)
    {
        this.month = ((month >=  1) && (month <= 12)) ? month : DEFAULT_MONTH;
    }

    /**
     * 
     */
     public void setDay (int day)
     {
         this.day = ((day >=  1) && (day <= 31)) ? day : DEFAULT_DAY;
     }
 }
于 2013-02-11T12:53:41.687 に答える
0

chartype は、一重引用符で囲まれたデータのみを保持します。二重引用符を使用する場合は、データ型を次のようにする必要がありますstring

于 2013-02-11T11:58:38.950 に答える
0

文字を誤って宣言するという構文エラーは別として、コンストラクターで宣言されたローカル変数にアクセスしようとしていますgetFullDate() method

公開日 (int whatIsYear、int whatIsMonth、int whatIsDay)

public String getFullDate()
{
    String fullDate;
    if (whatIsMonth < 10);    // the year, month, and day all give me incompatible  
    //rest of the code 
}

whatIsMonthwhatIsDayは、コンストラクターで定義されたローカル変数です。これらの変数をコンストラクターの外で使用することはできません。

getFullDate() メソッドは、インスタンス変数と「日」を使用する必要がありyearますmonthint whatIsYear, int whatIsMonth, int whatIsDayコンストラクターの引数のみであり、コンストラクターのみに限定されることに注意してください。コンストラクタの外からアクセスすることはできません。

于 2013-02-11T11:59:06.727 に答える
0

文字列リテラルを追加することはできません。上記のように何かを使用したい場合は、これを試してください

public static final CHARACTER INSET_HYPHEN = new CHARACTER('-');  

また

public static final char INSET_HYPHEN = '-';  
于 2013-02-11T11:59:12.070 に答える