首页 > 解决方案 > Java:如何不允许变量低于 0

问题描述

我有一个正在测试的计数器类。计数器以 1 递增或递减。但是,我不希望数字低于零,并且我想在计数器设置为负值时输出错误消息。下面是我的计数器类的代码。另外,我不确定如何让布尔测试显示一个字符串,说明计数器的两个实例相等(或不相等)。谢谢你的帮助。

public class Counter {

    private int counter;

    public Counter() {
        counter = 0;
    }

    //mutator adds 1 to counter
    public void plus1(){
        setCounter(getCounter() + 1);
    }

    //mutator subtracts 1 from counter
    public void minus1(){
        setCounter(getCounter() - 1);
    }

    //mutator
    public void setCounter(int newCounter){
        counter = newCounter;
    }

    //accessor
    public int getCounter(){
        return counter;
    }

    //polymorph
    public String toString(){
        return "The counter is currently at " + counter + ".";
    }

    public boolean equals(Counter a){
        return this.getCounter() == a.getCounter();
    }
}

标签: javastringclassobjectvariables

解决方案


让我尝试一一回答您的问题:

  • 不要让计数器使用减号1()设置为-ve值:为此,您可以添加类似的条件
if(counter == 0)
    throw new IllegalStateException("counter already 0"); // could be another exception type
  • 不让计数器使用 setCounter(newCounter) 设置为 -ve 值
if(newCounter < 0)
    throw new IllegalArgumentException("counter cannot be negative"); // could be another exception type
  • 布尔测试显示一个字符串是否计数器相等:

不确定您是否尝试覆盖 Object#equals 方法,那么您的方法签名是错误的,可能是

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Counter that = (Counter) o;
        return counter == that.counter;
    }

您可以使用一些记录器来打印字符串


推荐阅读