使用来自不同类的方法

时间:2010-11-27 13:26:42

标签: java

我对Java很陌生,这让我很困惑。

我有两节课。一个(controlNumber)有两个用于数字的int字段,一个是当前数字,一个是最大数字(一旦当前数字达到此值,它将被重置为1)。构造函数将当前数字初始化为1并将max作为参数(并检查max是正数且小于100)。
我有一个返回当前数字的方法,一个返回最大数字,一个将max设置为当前数字,一个将当前数字加1(使其朝向最大值),最后返回一个字符串如果当前数字只有一位数(因此5变为05),则将当前数字置于前面“0” toString看起来像这样:

public String toString()
    {
        if (currentNumber > 9) {
            return Integer.toString(currentNumber);
        }
        else {
            return ("0" + Integer.toString(currentNumber));
        }
    }

这门课很好用。
第二课是我开始遇到问题的地方。它有两个属于上述类的字段。构造函数使用两个不同的最大值初始化它们。这一切似乎都有效 现在我需要一个toString方法,该方法将返回一个字符串,其中包含两个字段的当前值,如果它是一位数,则前面的“/”和前面的“0”(所以如果日是3,月是11,它将返回“03/11”)。我的第一个想法只是使用类似我上面使用的Integer.toString,但事实证明你不能这样做(即使controlNumber类中的字段是整数)。所以我想到了使用上面的方法(这是一个不同的类),因为它完成了我想要的大部分工作,但我不知道如何。

我希望我有道理,有人可以帮我弄清楚如何解决我的问题。

3 个答案:

答案 0 :(得分:1)

我认为你的意思是有一个类SomeClass,它有两个ControlNumber类型的字段,你想要实现SomeClass.toString()来打印字段的组合值。如果是这种情况,那么你会做这样的事情:

class SomeClass
{
    ControlNumber number1;
    ControlNumber number2;

    [...]

    public String toString()
    {
        return number1.toString() + "/" + number2.toString();
    }
}

<强>更新

正如彼得所指出的,可以省略对number.toString()的显式调用,因此上述内容可以改写为:

    public String toString()
    {
        return number1 + "/" + number2;
    }

答案 1 :(得分:1)

如果您有两个上述类型的字段,称为a和b

public String toString() {
    return a + "/" + b;
}

您无需显式调用toString(),因为无论如何这都是行为。唯一的区别是,如果a或b为null,则将打印“null”,而调用toString()将抛出NullPointerException。

BTW您可以将方法缩短为

public String toString() {
    return (currentNumber > 9 ? "" : "0") + currentNumber;
}

答案 2 :(得分:0)

我接近这个的方式:

首先,创建一个实用程序函数来格式化整数

public class StringUtil {

    public static String format(int i) {
        if (i > 9) {
            return String.valueOf(i);
        } else {
            return ("0" + String.valueOf(i));
        }
    }

}

现在,您可以使用其他类中的此实用程序代码:

public String toString() {
    return StringUtil.format(currentNumber);
}

public String toString() {
    return StringUtil.format(max1) + "/" + StringUtil.format(max2);
}