Java—调用void方法并存储其值

Java—调用void方法并存储其值,java,Java,这是一道过去的试卷上的题。该问题要求在新类中声明Counter类型的变量c。然后,我应该将其初始化为计数器的新实例,其中n的值为100。然后,我必须将其n字段增加两次。然后将n字段的值打印到System.out 这两门课我都上过,但我对Counter2课不太清楚。我想我可能是把计数器变量声明错了 public class Counter { private int n; public int x; public Counter(int theN){ th

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

这两门课我都上过,但我对
Counter2
课不太清楚。我想我可能是把
计数器
变量声明错了

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);
    }
}
公共类计数器{
私人int n;
公共int x;
公共计数器(int-theN){
这个。n=然后;
}
公共int getN(){
返回n;
}
公共空间公司{
x=1+getN();
}
}
公共类柜台2{
计数器c;
公共整数递增两次(){
int i=0;
而(我
  • 为什么要有一个while循环?为什么不在两行中增加它呢?我认为这会更清楚
  • 就我个人而言,我不会在inc方法中使用getN()。这是类的公共接口。我会直接访问n变量,例如x=1+n

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

我只要

n+=2
要在
inc()
中向n添加两个,实际上并不是在增加
n
。而是将
x
设置为
n+1

因此,无论您运行多少次
inc
,在第一次运行之前,您将获得
n=initial Value
x=0
,在第一次运行之后,您将获得
n=initialValue
x=n+1

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)
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);
}
您从未两次调用
increment
。您的主要任务应该是:

1) Set c.N = 100;  
2) set finalResult = c.X (100)  
3) Print finalResult (100)
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
假设
n
是计数器的值,“声明计数器类型的变量c”并“将其初始化为新实例…取100”将按如下方式完成:
计数器c=新计数器(100);
。将其值增加两倍将非常简单:

int value = c.getValue(); 
value++;
value++;
c.setValue(value);
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
    }
}
…假设
getValue()
被定义为获取计数器变量的方法

因此,把所有这些放在一起很简单:

int value = c.getValue(); 
value++;
value++;
c.setValue(value);
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
    }
}
当然,这可以进一步简化——递增可以像在名为
increment()
计数器类中创建一个方法一样简单,例如,它只执行
n++
,但这是解决方案的基本实现

(在计数器中实现
增量()


@Nambari,刚刚尝试了静态,但它只打印了100。猜测我的while loopCounter c=新计数器(100)有问题;我不理解这个问题(标题更不理解)。在
计数器2
中,您需要实际实例化
计数器
,以便对其执行任何有用的操作,但不清楚您要执行的操作。我需要增加
n
字段(100)两次。然后打印
n
字段。目标是得到102。问题的第一部分要求我创建一个公共方法
inc
,该方法在
n
中添加1,但不返回任何结果。因此我猜我必须使用此方法将100增加到102。这不是你所做的。是的,谢谢我更改了
inc()now@nsc010-
inc()
方法最好是简单地
n+=1
n=n+1
甚至
n++
;不需要调用
getN()
既然你已经在
计数器
类中了。@roddyoffrozenpeas,是的,谢谢你,这很有意义。我现在修改了我的代码。