为什么此getter函数仅返回初始值

时间:2020-09-23 02:22:59

标签: java oop getter

我正在学习面向对象的程序设计,并开始学习有关继承的知识。我的老师给我的任务是制作一个带有6个“按钮”的计数器对象:递增,递减,重置,AddMemory,ResetMemory和退出。每个按钮的作用都非常简单。

要求是我必须使用JOptionPane命令,我必须创建一个具有counter属性的Counter类,递增,递减,重置和退出方法,我必须创建一个具有Memory属性的MemoryCounter类restMemory ,以及addMemory方法。我还必须制作一个MemoryCounterConsoleMenu类,该类通过JOptionPane命令创建输入框并执行适当的方法。我要做的最后一件事是创建一个MemoryCounterTest类,该类将MemoryCounterConsoleMenu和MemoryCounter类放在一起

所以我做了所有这些,就在这里:

第一个是Counter类

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;
    }
}

这是MemoryCounter类

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());
        }
    }
}

除内存值外,其他所有内容均正常运行。它保持恒定的零。我自己进行了一些故障排除,发现代码中唯一的问题是“ addMem()”方法是MemoryCounter类,尤其是“ getCounter()”方法的实现。由于某种原因,它只会返回0。

弄清楚这一点后,我仍无法确定问题发生的原因或解决方法

1 个答案:

答案 0 :(得分:-1)

因为它们是两个独立的计数器,所以它保持为0。

MemoryCounter类扩展了Counter类,因此您不需要单独的

{
    "data": [
        [
            "Roshan Zaid",
            "Stackoverflow user",
            "New member"
        ],
        [
            "AmirAli Esteki",
            "Stackoverflow and AskUbuntu user",
            "New member"
        ]
    ]
}

只需通过static Counter counter = new Counter(); 进行所有操作即可。