【问题标题】:How to assign values to Attributes by passing argument using from method?如何通过使用 from 方法传递参数来为属性赋值?
【发布时间】:2020-09-25 22:42:10
【问题描述】:

我只需要使用一种 set 方法将 YEAR、MONTH、DAY 属性分配给值。因此,我通过逐行调用 set 方法将 DATE.YEAR、DATE.MONTH、DATE.DATE 作为参数传递,并带有值。您可以对 set 方法进行任何更改。但是您不能对主要方法进行更改。

   class Date{
    static int YEAR;
    static int MONTH;
    static int DAY;

    public void set(int field,int value){
        //i need to put code here to assign YEAR, MONTH, DAY to values
    }
    public void printDate(){
        System.out.println(YEAR+"-"+MONTH+"-"+DAY);
    }

}
class Demo{
    public static void main(String args[]){
        Date d1=new Date();
        d1.set(Date.YEAR,2016); //set(int field, int value)
        d1.set(Date.MONTH,05);
        d1.set(Date.DAY,30);
        d1.printDate(); //2016-5-30
    }
}

【问题讨论】:

    标签: java object methods static arguments


    【解决方案1】:

    YEARMONTHDAY 标记为final,并在set() 方法中使用它们进行比较

        class Date {
    
            static final int YEAR = 0;
            static final int MONTH = 1;
            static final int DAY = 2;
    
            private int year;
            private int month;
            private int day;
    
            public void set(int field, int value) {
                if (field == YEAR)
                    this.year = value;
                else if (field == MONTH)
                    this.month = value;
                else if (field == DAY)
                    this.day = value;
            }
    
            public void printDate() {
                System.out.println(year + "-" + month + "-" + day);
            }
        }
    

    【讨论】:

    • 你能解释一下为什么你把 YEAR, MONTH, DAY 定为 final 以及为什么你又得到了一个年, 月, 日吗?
    • 因为set()方法没有改变,所以我只是使用final将它们设为常量并使用static共享给所有对象,并使变量与每个对象相关
    【解决方案2】:

    我认为你应该使用构造函数而不是方法,

    在日期类中

    public Date(int YEAR, int MONTH, int DAY){
    this.YEAR=YEAR;
    this.MONTH = MONTH;
    this.DAY = DAY;
    }
    
    

    并从您初始化的变量中删除静态,如果您使用 satic,则必须在同一行中为变量赋值。

    你的代码是

     public static void main(String args[]){
            Date d1=new Date(2016, 05, 30);
            d1.printDate(); //2016-5-30
        }
    

    【讨论】:

    • 问题是我无法更改主要方法。因为它是从一项任务中给我的。
    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    相关资源
    最近更新 更多