2012-08-28 52 views
0

這是來自過去考試試卷的問題。該問題要求在新類中聲明類型Counter的變量c。然後,我應該將它初始化爲Counter的一個新實例,n取值爲100.然後,我必須遞增其n字段兩次。然後將n字段的值打印到System.outJava - 調用無效方法並存儲它們的值

我已經完成了兩門課,但我不確定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); 
    } 
} 
+0

@Nambari,只是試圖靜態的,而是它只是打印100猜測有什麼問題我while循環 – nsc010

+0

計數器C =新的計數器(100); – akluth

+3

我不明白這個問題(甚至更少的標題)。在'Counter2'中,你需要真正*實例化一個'Counter'來做任何有用的事情,但是你不知道你想做什麼。 –

回答

3

inc()你實際上並沒有增加n。您正在設置xn+1

所以,問題不在於你有多少次運行inc,第一次運行前,你將有n = initial Valuex=0,第一次運行後,並按照你n = initialValuex = n + 1

+0

問題的第一部分要求我創建一個公共方法'inc',它將1加到'n'並且不返回任何結果。所以我猜我必須用這種方法將100增加到102. – nsc010

+1

這不是你正在做的事情。 – SJuan76

+0

是的,謝謝我將'inc()'方法改爲'n = 1 + getN();'。做了一些調整,它現在可以工作 – nsc010

1
  • 爲什麼while循環?爲什麼不只是增加兩行。這在我看來會更清晰
  • 就我個人而言,我不會在你的inc方法中使用getN()。這是該課程的公共接口。我會直接訪問n變量,例如x = 1 + n;

  • 你不需要x和n。只需增加n。這可能會導致問題,因爲你總是增加一個永遠不會改變的值(n)。如果你想增加兩次,你需要重新分配給n。

我會做

n+=2 

增加2至n

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

1

假設n是計數器的值,「聲明一個Counter類型的變量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 
    } 
} 

當然,這可以進一步簡化 - 增加可能是因爲創建一個名爲increment()Counter類的方法,它只是做n++一樣簡單例如 - 但這是解決方案的基本實現。

(實現在櫃檯increment()會是這個樣子:)

public void increment() { 
    n++; // equivalent to n = n+1 or n+= 1 
} 
相關問題