如何编写.add()方法?

时间:2013-03-13 02:57:20

标签: java class methods class-method

这是一个家庭作业问题,我无法理解如何在类Distance中创建.add()方法。

类Distance有两个整数实例变量:

private int feet;
private int inches;

它有一个无参数构造函数,用于初始化零英尺和零英寸的距离。

它有一个两个参数构造函数,它接受英尺和英寸的两个正整数,如果它们是负数或者如果英寸大于11,则抛出和异常。

它还具有实例变量的get / set方法。我的get / set方法:

public void setFeet(int f){
    feet = f;
}

public void setInches(int in){
    inches = in;
}

public int getFeet(){
    return feet;
}

public int getInches(){
    return inches;
}

对于愿意回答的任何人,我的第一个问题是:我应该如何设置这些get / set方法?我不确定自己。

我的第二个问题在于创建一个方法add(),它将另一个Distance对象添加到自身。也就是说,

w1 = new Distance(4,9);
w2 = new Distance(3,6);
w1.add(w2); //w1 becomes 8 feet, 3 inches.

到目前为止,我有这个:

    public int add(Distance d) {
    int df = d.getFeet();
    int di = d.getInches();
    int a = this.feet;
    int b = this.inches;
    int c = a.getFeet();
    int d = b.getInches();
    int sumInches, sumFeet, temp;
    sumInches =di + d;
    sumFeet = df + c;
    if (sumInches>11) {
        temp = sumInches-11;
        sumFeet = sumFeet+1;
        sumInches = temp;
    }
    this.feet = sumFeet;
    this.inches = sumInches;
}

但我不确定这是否会编译(我无法访问我现在可以安装编译器的计算机)。有人可以检查一下并向我解释为什么这可能是错的吗?

7 个答案:

答案 0 :(得分:1)

int a = this.feet;
int b = this.inches;

有点冗长......

int c = a.getFeet();
int d = b.getInches();

不会编译,回想一下原始值(在我们的例子中是int)没有方法。


这是一个解决方案,(增加了对varargs的支持,允许无限Distance s):

public void add(Distance... distance) {
    for(Distance d : distance) {
        feet += d.getFeet();
        if(inches + d.getInches >= 12)
            feet++;
        inches += d.getInches() % 12;
    }
}

有了这个,您可以轻松添加如下:

d1.add(d2, d3, d4, d5);

答案 1 :(得分:1)

我愿意回答的第一个问题:我应该如何设置这些get / set方法?我不确定自己。

你的getter / setter看起来正确;它们的意思是encapsulate成员变量,以便它们不会被意外地“修改”(限制访问)。您可能希望将成员变量初始化为某个“默认”值 - 在这种情况下,我将它们初始化为0以下。 注意:默认情况下,编译器会将它们初始化为0。

private int feet = 0;
private int inches = 0;

public void setFeet(int f){
    feet = f;
}

public void setInches(int in){
    feet = in;
}

public int getFeet(){
    return feet;
}

public int getInches(){
    return inches;
}

我的第二个问题在于创建方法add()。

关于您的“添加”方法,您可能希望将本地变量更改为更具“描述性”的内容,从长远来看,它将有助于“可读性”和“可维护性”。

由于“Distance”类已包含成员变量“feet”和“inches”,因此无需将这些值设置为局部变量。您可以直接访问它们 - 以及任何类的getter / setter。

   public int add(Distance newDistance) {

    int newDistanceFeet = newDistance.getFeet();
    int newDistanceInches = newDistance.getInches();

    int sumInches = newDistanceInches + this.getInches();
    int sumFeet = newDistanceFeet + this.getFeet();

    // Now we can check to see if any conversion are needed.. Note: 12 inches = 1 foot
    //   
    sumInches += (sumInches % 12);
    sumFeet += (sumInches / 12);

   // Now set the newly added inches/feet to the class's member variables
   //
   this.setFeet(sumFeet);
   this.setInches(sumInches);
}

答案 2 :(得分:1)

public void setInches(int in){
    feet = in;
}

我认为这是一个错字,因为你将in值分配给英尺而不是英寸。

public int getInches(){
    return Inches;
}

另一个错字。 Java区分大小写,因此“Inches”与“inches”不同。 除此之外,吸气剂/安装者看起来很好。

对于add()方法......没有理由创建那些“a”,“b”,“c”和“d”变量

int a = this.feet;
int b = this.inches;
int c = a.getFeet();
int d = b.getInches();

你可以直接使用this.feet和this.inches。这本身并没有错,只是不必要并且使代码混乱。另外,我强烈建议始终创建有意义的变量名称。 “a”,“b”,“c”代码难以阅读。变量名称应该具有表现力。 此外,在您的算法中,您需要从总和英寸中减去12。 因此add方法可以更简洁地写成:

public void add(Distance d)
{
  int newFeet = this.feet + d.feet;
  int newInches = this.inches + d.inches;
  if (newInches > 11)
  {
     newFeet++;
     newInches = newInches - 12;
  }
  this.feet = newFeet;
  this.inches = newInches;
} 

就个人而言,我会通过将所有内容转换为英寸然后使用除法和模数运算符(%)来确定英尺和英寸来实现该逻辑,但如果您愿意,我会将其作为练习留给您。

答案 3 :(得分:0)

基本想法是正确的,但你做错了一些事情,而是考虑:

public int add( Distance d ){
  feet += d.feet;
  inches += d.inches;
  if( inches >= 12 ){
    inches = inches - 12;
    feet++;
  }
}

我看到的最大问题是

int a = this.feet;
int d = a.getFeet();

这里是一个int而不是Distance对象因此你不能调用getFeet()

答案 4 :(得分:0)

将你的add()更新为: -

public int add(Distance d) {
    int df = d.getFeet();
    int di = d.getInches();
    int a = this.feet;
    int b = this.inches;

错误cdintegers而非Distance个对象。您不需要c and d个整数。

    int sumInches, sumFeet, temp;
    sumInches =di + b;
    sumFeet = df + a;
    if (sumInches>11) {
        temp = sumInches-11;
        sumFeet = sumFeet+1;
        sumInches = temp;
    }
    this.feet = sumFeet;
    this.inches = sumInches;

答案 5 :(得分:0)

你的问题在这里,

int a = this.feet;
int b = this.inches;
int c = a.getFeet();
int d = b.getInches();

因为a和b是int变量。它们没有getFeet()和getInches()方法。 将add()方法更改为

public int add(Distance d) {
    int df = d.getFeet();
    int di = d.getInches();
    int sumInches, sumFeet, temp;
    sumInches =di + this.inches;
    sumFeet = df + this.feet;
    if (sumInches>11) {
        temp = sumInches-11;
        sumFeet = sumFeet+1;
        sumInches = temp;
    }
    this.feet = sumFeet;
    this.inches = sumInches;
}

答案 6 :(得分:0)

由于这是一个家庭作业问题,我不提供完整的解决方案。由于您尝试了add方法,我将进一步优化它并在此处提供相同的注释

public void add(Distance distance) {

        int extraFeet=0;  /*Intializing the extra Feet*/
        extraFeet = (this.inches+distance.getInches())/11; /*Calculating the additional feet*/
        if(extraFeet >0)  
            this.inches = (this.inches+distance.getInches())%11;  /*if extra feet is greater than zero thn the remainder is the inches*/
        else
            this.inches +=distance.getInches(); /*else teh remainder is the sum of the inches*/
        this.feet += (distance.getFeet()+extraFeet);


    }