0

这是过去试卷中的一道题。问题要求在新类中声明一个c类型的变量。Counter然后我应该将它初始化为一个新的实例,Counter值为n100。然后我必须将其n字段增加两次。n然后将字段的值打印到System.out.

我已经完成了这两门课,但我不确定这Counter2门课。我想我可能在声明Counter变量错误。

public class Counter {
    private int n;
    public int x;

    public Counter(int theN){
        this.n=theN;
    }

    public int getN(){
        return n;
    }

    public void inc(){
        x = 1+ getN();
    }
}

public class Counter2{
    Counter c;

    public int incrementTwice(){
        int i = 0;

        while(i<2){
            c.inc();
            i++;
        }
        return c.x;
    }

    public static void main (String[] args){
        c = new Counter(100);
        int finalResult = c.getN();
        System.out.println(finalResult);
    }
}
4

4 回答 4

3

inc()你实际上并没有增加n. 您正在设置xn+1.

所以,不管你跑了多少次inc,在第一次跑步之前你将拥有n = initial Valuex=0在第一次跑步之后和跟随你有n = initialValuex = n + 1

于 2012-08-28T16:20:51.403 回答
2
public static void main (String[] args){

    c = new Counter(100);

    int finalResult = c.getN();
    System.out.println(finalResult);
}

我希望输出是100

调用堆栈如下:

1) Set c.N = 100;  
2) set finalResult = c.X (100)  
3) Print finalResult (100)

你从不打电话给incrementTwice. 你的主要应该是以下内容:

public static void main (String[] args){
    Counter2 counter2 = new Counter2();  
    counter2.c.n = 100;  
    counter2.incrementTwice();
    int finalResult = counter2.c.getN();
    System.out.println(finalResult);
}

关键是inc()你正在添加x而不是添加,n所以你需要返回x

于 2012-08-28T16:23:48.373 回答
1

假设n是计数器的值,“声明一个计数器类型的变量 c”和“将其初始化为一个新实例......取值 100”将像这样完成Counter c = new Counter(100);:将其值增加两次就像这样简单:

int value = c.getValue(); 
value++;
value++;
c.setValue(value);

...假设它getValue()被定义为获取计数器变量的方法。

所以把它们放在一起就这么简单:

public class MyClass {
    private Counter c;

    public MyClass() {
        c = new Counter(100);
    }

    public void increment() {
        int value = c.getValue();
        value++;
        c.setValue(value);
    }

    public void printCounterValue() {
        System.out.println(c.getValue());
    }

    public static void main(String[] args) {
        MyClass instance = new MyClass(); // creates new class with Counter c initialized to 100
        instance.increment(); // increment once
        instance.increment(); // increment twice
        instance.printCounterValue(); // print to screen
    }
}

当然,这可以进一步简化——例如,递增可以像在Counter类中创建一个简单的方法一样increment()简单n++,但这是解决方案的基本实现。

(实现increment()in Counter 看起来像这样:)

public void increment() {
    n++; // equivalent to n = n+1 or n+= 1
}
于 2012-08-28T16:28:04.560 回答
1
  • 为什么有一个while循环?为什么不把它增加两行。在我看来这会更清楚
  • 就个人而言,我不会在您的 inc 方法中使用 getN() 。这是该类的公共接口。我会直接访问 n 变量,例如 x = 1 + n;

  • 你不需要x和n。只需增加 n。这可能会导致问题,因为您总是在递增一个永远不会改变的值 (n)。如果要增加两次,则需要重新分配给 n。

我会做的

n+=2

将两个加到 n

于 2012-08-28T16:19:05.617 回答