这是一个家庭作业问题,我无法理解如何在类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;
}
但我不确定这是否会编译(我无法访问我现在可以安装编译器的计算机)。有人可以检查一下并向我解释为什么这可能是错的吗?
答案 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;
错误:c
和d
是integers
而非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);
}