Для следующей программы я ожидал выход как:Почему мой вывод не так, как ожидалось? Java ACM
5 * 2^3 = 40
Но выход:
40 * 2^0 = 40
Первый Я строю «HandyInt» класса:
/**
* An integer that provides arithmetic operations for great glory.
*/
public class HandyInt {
/** The integer represented by an instance of this class. */
private int theInt;
/**
* Constructs a new handy integer representing the given int.
*
* @param theInt
* the integer to be represented by this instance.
*/
public HandyInt(int theInt) {
this.theInt = theInt;
}
/**
* Constructs a new handy integer representing the integer represented by
* the given handy integer.
*
* @param handyInt
* the handy integer to intialize the new object with.
*/
public HandyInt(HandyInt handyInt) {
this.theInt = handyInt.theInt;
}
/**
* Returns the integer represented by this instance.
*
* @return the represented integer.
*/
public int getInt() {
return theInt;
}
/**
* Returns a handy integer that represents the sum of this and the other
* handy integer.
*
* @param other
* the handy integer to add.
* @return sum of the two handy integers.
*/
public HandyInt add(HandyInt other) {
theInt += other.theInt;
return this;
}
/**
* Returns a handy integer that represents the result of subtracting the
* other integer from this one.
*
* @param other
* the handy integer to subtract from this one.
* @return difference of the two handy integers.
*/
public HandyInt sub(HandyInt other) {
theInt -= other.theInt;
return this;
}
@Override
public String toString() {
return Integer.toString(theInt);
}
}
И когда я построить код общественного бежать, строящие на моем классе «HandyInt»:
import acm.program.ConsoleProgram;
public class ComplexMathSolver extends ConsoleProgram {
@Override
public void run() {
HandyInt factor = new HandyInt(5);
HandyInt exp = new HandyInt(3);
HandyInt result = multiplyWithPowerOfTwo(factor, exp);
println(factor + " * 2^" + exp + " = " + result);
}
/**
* Returns the result of multiplying {@code factor} with 2 to the power of
* {@code exp}.
*
* @param factor
* the handy integer to multiply with the power.
* @param exp
* the exponent of the power.
* @return the result of the multiplication.
*/
private HandyInt multiplyWithPowerOfTwo(HandyInt factor, HandyInt exp) {
HandyInt one = new HandyInt(1);
while (exp.getInt() > 0) {
factor = factor.add(factor);
exp = exp.sub(one);
}
return factor;
}
}
Что не так в моем классе «HandyInt», чтобы исправить выход? Спасибо!
Ваши объекты мутируют – GurV