0

これは過去の試験問題からの質問です。質問は、新しいクラスcで型の変数を宣言することを求めています。次に、値を100にしてCounter、の新しいインスタンスに初期化する必要があります。次に、そのフィールドを2回インクリメントする必要があります。次に、フィールドの値をに出力します。CounternnnSystem.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。に設定xしていn+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
  • なぜwhileループがあるのですか?2行でインクリメントしてみませんか。それは私の意見ではより明確になるでしょう
  • 個人的には、incメソッドでgetN()を使用しません。これは、クラスへのパブリックインターフェイスです。n変数に直接アクセスします。例:x = 1 + n;

  • xとnは必要ありません。nをインクリメントするだけです。常に変化しない値(n)を常にインクリメントしているため、これが問題の原因である可能性があります。2回インクリメントする場合は、nに再割り当てする必要があります。

私はただやるだろう

n+=2

nに2を加える

于 2012-08-28T16:19:05.617 に答える
1

カウンターの値を想定するnと、「Counter型の変数cを宣言」し、「新しいインスタンスに初期化する...値を100にする」は、次のように実行されますCounter c = new Counter(100);。その値を2回インクリメントするのは、次のように簡単です。

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

getValue()...それがCounterの変数を取得するメソッドとして定義されていると仮定します。

したがって、すべてをまとめるのは次のように簡単です。

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++

(in Counterを実装すると、次のincrement()ようになります:)

public void increment() {
    n++; // equivalent to n = n+1 or n+= 1
}
于 2012-08-28T16:28:04.560 に答える