为什么我的输出不符合预期?Java ACM

为什么我的输出不符合预期?Java ACM,java,class-hierarchy,acm-java-libraries,Java,Class Hierarchy,Acm Java Libraries,对于以下程序,我希望输出为: 5*2^3=40 但结果是: 40*2^0=40 首先,我构建了一个类“HandyInt”: 当我构建一个公共运行代码时,它构建在我的类“HandyInt”上: 在我的“HandyInt”类中修复输出有什么错误? 谢谢大家! 对象正在变化,因为当您调用multiplyWithPowerOfTwo()方法时,您更改了对象的内部结构factor和exp。另外,您的结果指向与因子相同的对象您的对象正在发生变化。谢谢,我在“HandyInt”类中修复了它。在add()和su

对于以下程序,我希望输出为:

5*2^3=40

但结果是:

40*2^0=40

首先,我构建了一个类“HandyInt”:

当我构建一个公共运行代码时,它构建在我的类“HandyInt”上:

在我的“HandyInt”类中修复输出有什么错误?
谢谢大家!

对象正在变化,因为当您调用
multiplyWithPowerOfTwo()
方法时,您更改了对象的内部结构
factor
exp
。另外,您的
结果
指向与
因子
相同的对象

您的对象正在发生变化。谢谢,我在“HandyInt”类中修复了它。在
add()
sub()
方法中,我创建了一个新的HandyInt:
HandyInt sub=newhandyint(theInt);sub.theInt-=其他.theInt;返回子节点
/**
* 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);
 }
}
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;
 }   
}