如何以及为什么实现静态方法intValue -罗马数字转换



我向您报告我老师的问题:

实现静态实用程序方法intValue并重用您的代码

// TODO implement this
        public static int intValue(String roman) {
            return 0;
        }

我不太明白为什么我需要使用静态方法,为什么我需要重用代码,我认为它是这样的:

public int intValue ()  {
        int decimal = 0;
        int lastNumber = 0;
        number = number.toUpperCase();
        for (int x = number.length() - 1; x >= 0; x--) {
            char convertNumber = number.charAt(x);
            switch (convertNumber) {
            case 'M':
                decimal = processDecimal(1000, lastNumber, decimal);
                lastNumber = 1000;
                break;
            case 'D':
                decimal = processDecimal(500, lastNumber, decimal);
                lastNumber = 500;
                break;
            case 'C':
                decimal = processDecimal(100, lastNumber, decimal);
                lastNumber = 100;
                break;
            case 'L':
                decimal = processDecimal(50, lastNumber, decimal);
                lastNumber = 50;
                break;
            case 'X':
                decimal = processDecimal(10, lastNumber, decimal);
                lastNumber = 10;
                break;
            case 'V':
                decimal = processDecimal(5, lastNumber, decimal);
                lastNumber = 5;
                break;
            case 'I':
                decimal = processDecimal(1, lastNumber, decimal);
                lastNumber = 1;
                break;
            }   
        }
        return decimal;
有人能给我解释一下吗?由于

你的老师想让你去掉return 0;这行,并写下方法主体的内容:

    public static int intValue(String roman) {
        //write code here that returns an int based on a Roman numeral String like "MVCXIII"
    }

如果我在网站的正确操作上犯了错误,我感到非常抱歉。

我将所有的实现方法public int intValue()移动到私有静态int intValue(String roman)中,并重构public int intValue()方法。我想这可能是我老师要求的手段;一个暂定的解决方案如下:

    public static int intValue (String roman){
        int decimal = 0;
        int lastNumber = 0;
        roman = roman.toUpperCase();
        for (int x = roman.length() - 1; x >= 0; x--) {
            char convertNumber = roman.charAt(x);       
            switch (convertNumber) {
            case 'M':
                decimal = processDecimal(1000, lastNumber, decimal);
                lastNumber = 1000;
                break;
            case 'D':
                decimal = processDecimal(500, lastNumber, decimal);
                lastNumber = 500;
                break;
            case 'C':
                decimal = processDecimal(100, lastNumber, decimal);
                lastNumber = 100;
                break;
            case 'L':
                decimal = processDecimal(50, lastNumber, decimal);
                lastNumber = 50;
                break;
            case 'X':
                decimal = processDecimal(10, lastNumber, decimal);
                lastNumber = 10;
                break;
            case 'V':
                decimal = processDecimal(5, lastNumber, decimal);
                lastNumber = 5;
                break;
            case 'I':
                decimal = processDecimal(1, lastNumber, decimal);
                lastNumber = 1;
                break;
            }
        }
        return decimal;     
    }
    public int intValue()  {
        int rn = this.intValue();
        return rn;  
    }

最新更新