本帖最后由 Greepod 于 2013-11-10 10:20:29 编辑

解决方案 »

  1.   


    没有权限修改自己的帖子..., 好吧我把返回值另起一行,话说国外这种写法的不少啊?问题1是把下面可变的Date类。重新编写,使之成为(immutable)不可改变的,然后写一个小程序测试:
    class Date{

    private int day,month,year;

    public Date(int d, int m, int y){//assume valid date
    day = d; month = m; year = y;
    }
    public int day(){
    return day;
    }

    public int month(){
    return month;
    }

    public int year(){
    return year;
    }

    public String toString(){
    return day + "/" + month +"/"+ year;
    }
     
    public void successorDate(){
            int daysInMonth[] = {31,28,31,30,31,30,31,31,30,31,30,31};
            
    if(year % 4 == 0 && (year % 100 !=0 || year % 400 == 0))
       daysInMonth[1] = 29;

    if(day < daysInMonth[month])
       day = day + 1;

    else{
       day = 1;
       if(month < 12) month = month + 1;
       else{
          month = 1; year = year + 1;
       }
    }
    }
    }
    下面是我改的面目狰狞版本,不知为何报错还不给错误信息,放出来有助于你们理解题意,主要还是帮我解答问题
    class test
    {
        public static void main(String[] args)
        {
         Date d1= new Date(11,02,2013);
         System.out.print(d1);
        }
        
    }class Date
    {
    private int day,month,year;

    public Date(int d, int m, int y)
    {//assume valid date
    day = d; month = m; year = y;
    }

    public int day(){
    return day;
    }

    public int month(){
    return month;
    }

    public int year(){
    return year;
    }

    public String toString(){return day + "/" + month +"/"+ year;} 

    public void successorDate()
    {
    int d=day;
    int m=month;
    int y=year;
    int daysInMonth[] = {31,28,31,30,31,30,31,31,30,31,30,31};

    if(year % 4 == 0 && (year % 100 !=0 || year % 400 == 0))
       daysInMonth[1] = 29;
    if(day < daysInMonth[month])
       d = day + 1;
    else
    {
    d = 1;
    if(month < 12)
    month = month + 1;
    else
    {
          month = 1; year = year + 1;
        }
    }
    return new Date(d,m,y);
    }
    }
    第2个问题是:列出的一个不可变类car,而每一个汽车都有一个登记号码(REG),品牌,里程数和价格。两辆车如果具有相同的登记号码(REG)那它们就是同一辆车。写出下列为您的汽车类:用equals,compareTo,toString,hashCode的方法写一个简单的测试:
    final class Car{
    private final String reg;
    private final String make;
    private final int mileage;
    private final double value;

    Car(String r, String m, int mi, int v){
    reg = r; make = m;
    mileage = mi; value = v;
    }
    public String reg(){
    return reg;
    }
    public String make(){
    return make;
    }
    public String mileage(){
    return mileage;
    }
    public String value(){
    return value;
    }
    }
      

  2.   

    问题一
    貌似main函数要写在public class里吧,也就是和文件名同名的public class里才能运行
      

  3.   


    那不是问题吧,问题是可变不可变类,而且我是在JCreator里,不用加public
      

  4.   

    public void successorDate() {
      ...
      return new Date(d,m,y);
    }
    所谓immutable,大概就是LZ理解的,方法不会修改对象,所有修改方法其实返回的一个新对象。
    但是明显LZ的基本语法就是错的,void方法返回值,结果返回new Date。