簡體   English   中英

為什么這個 getter 函數只返回初始值

[英]Why is this getter functions only returning the initial value

我正在學習面向對象編程並開始學習 inheritance。我的老師給我的作業是制作一個帶有 6 個“按鈕”的計數器 object:Increment、Decrement、Reset、AddMemory、ResetMemory 和 Quit。 每個按鈕的作用相當簡單。

要求是我必須使用 JOptionPane 命令,我必須制作一個計數器 class 具有計數器屬性、遞增、遞減、重置和退出方法,我必須制作一個 MemoryCounter class 具有 memory 屬性、restMemory 和 addMemory方法。 我還必須創建一個 MemoryCounterConsoleMenu class,它從 JOptionPane 命令創建輸入框並執行適當的方法。 我要做的最后一件事是制作一個 MemoryCounterTest class,它將 MemoryCounterConsoleMenu 和 MemoryCounter 類結合在一起

所以我做了所有這些,這里是:

第一個是櫃台 class

public class Counter 
{
    private int counter = 0;

    public void increment()
    {
        setCounter(getCounter() + 1);
    }

    public void decrement()
    {
        setCounter(getCounter() - 1);
    }

    public void reset()
    {
        setCounter(0);
    }

    public void setCounter(int counter) {
        this.counter = counter;
    }

    public int getCounter() {
        return counter;
    }
}

這是內存計數器 class

public class MemoryCounter extends Counter
{
    private int memory = 0;

    public void resetMem()
    {
        setMemory(0);
    }

    public void addMem()
    {
        setMemory(getCounter());
    }

    public void setMemory(int memory)
    {
        this.memory = memory;
    }

    public int getMemory()
    {
        return memory;
    }
}

接下來是 MemoryConsoleMenu

public class MemoryCounterConsoleMenu
{
    static MemoryCounter memCounter = new MemoryCounter();

    static Counter counter = new Counter();

    public static int console()
    {
        System.out.println(memCounter.getMemory());
        Object[] options = {"Reset Mem", "Add Mem", "Increment", "Decrement", "Reset", "Quit" };
        int objectIndex = JOptionPane.showOptionDialog(null, "Counter = " + counter.getCounter() +  "Memory = " 
        + memCounter.getMemory(), "MemoryCounter",JOptionPane.PLAIN_MESSAGE, 
        JOptionPane.PLAIN_MESSAGE, null,    options, options[5]);
    
        return objectIndex;
    }   

public static int change(int objectIndex)
{
        if(objectIndex == 0)
        {
            memCounter.resetMem();
            return 1;
        }
    
        else if(objectIndex == 1)
        {
            memCounter.addMem();
            return 2;
        }
    
        else if(objectIndex == 2)
        {
            counter.increment();
            return 3;
        }
        else if(objectIndex == 3)
        {
            counter.decrement();
            return 4;
        }
    
        else if(objectIndex == 4)
        {
            counter.reset();
            return 5;
        }
    
        else
        {
            return 6;
        }
    }
}

最后,還有 MemoryCounterTest

public class MemoryCounterTest 
{
    public static void main(String[] args)
    {
        MemoryCounterConsoleMenu memoryConsole = new MemoryCounterConsoleMenu();
    
        for(int i = 0; i != 6;)
        {
            i = memoryConsole.change(memoryConsole.console());
        }
    }
}

除 memory 值外,一切正常。 它保持在恆定的零。 我自己做了一些故障排除,發現代碼中唯一的問題是“addMem()”方法中的 MemoryCounter class,特別是“getCounter()”方法的實現。 由於某種原因,它只會返回 0。

弄清楚這一點后,我對問題發生的原因或解決方法沒有任何根據

它保持為 0,因為它們是兩個獨立的計數器。

MemoryCounter class 擴展了 Counter class,因此您不需要單獨的

static Counter counter = new Counter();

只需通過memCounter做所有事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM