如何通过减少“if”语句的数量来改进这个简单的代码?

时间:2014-02-22 14:11:23

标签: java object if-statement

我是Java新手,正在编写一个简单的类赋值代码。这是:

public class Digit {

    int value;
    int end;


public Digit(int numSystem, int value) {

    this.end = numSystem;
    this.value = value;

}

public int getValue(){
    return value;
}

public boolean increment(){
    while (value < end){
        value +=1;
    }
        if(value == end){
            value = 0;
            return true;
        }

        else{
            return false;
        }

        }

public String toString(){

    if (value < 9){

        return(String.valueOf(value));
    }
    if(value == 10){
        return("A");

    }
    if(value ==11){
        return("B");
    }
    if(value == 12){
        return("C");
    }
    if(value == 13){
        return("D");
    }
    if(value == 14){
        return("E");
    }
    if(value == 15){
        return("F");
    }
    if(value == 16){
        return("G");
    }
    if(value == 17){
        return("H");
    }
    if(value == 18){
        return("I");
    }
    if(value == 19){
        return("J");
    }
    if(value == 20){
        return("K");
    }
    if(value == 21){
        return("L");
    }
    if(value == 22){
        return("M");
    }
    if(value == 23){
        return("N");
    }
    if(value == 24){
        return("O");
    }
    if(value == 25){
        return("P");
    }
    if(value == 26){
        return("Q");
    }
    if(value == 27){
        return("R");
    }
    if(value == 28){
        return("S");
    }
    if(value == 29){
        return("T");
    }
    if(value == 30){
        return("U");
    }
    if(value == 31){
        return("V");
    }
    if(value == 32){
        return("W");
    }
    if(value == 33){
        return("X");
    }
        if(value ==34){

        return("Y");
    }
    else{
        return("Z");
    }


}


}

现在,我认为“toString()”方法看起来很糟糕。我在考虑如何做同样的事情,但要提高效率。所以,我想我可以使一个ArrayList保存“value”的值,然后遍历它并为其分配一个字母。也许这是一个好主意?

如果是这样,我该怎么做?因为我每次尝试都会收到错误。

感谢大家的时间!

6 个答案:

答案 0 :(得分:9)

你可以用以下方法简化它:

public String toString(){
    if (value <= 9) return String.valueOf(value);
    else if (value >= 10 && value <= 35) return "" + (char) ('A' + value - 10);
    else return "Z";
}

请注意,在您的代码toString中,如果Z可能会出错,则会返回value == 9

答案 1 :(得分:1)

你可以在开始时生成一个数组,在你的ToString中你只需要在数组中查找

public String toString(){
    return arr[value];
}

毋庸置疑,您必须拥有值为

的数组
public class Digit {
    static String[] arr = {"0","1",...,"A","B",..."Z"};
    ...

答案 2 :(得分:0)

您可以查看switch语句。

这段代码也可以完成工作

public String toString(){
    if (value < 9){
        return String.valueOf(value);
    } else {
        // Create a char array with values from a to z
        char[] chars = new char[26];
        int currentChar = 97;
        for (int i = 0; i < chars.length; i++){
            chars[i] = (char) currentChar;
            currentChar++;
        }
        return chars[value - 10];
    }
}

答案 3 :(得分:0)

增量可以减少为:

public boolean increment(){
    while (value < end){
        value +=1;
    }

    value = 0;
    return true;
}

答案 4 :(得分:0)

您可以使用HashMap,然后可以存储成对的int以及相应的字符。然后,您可以使用myMap.get(30)来检索字符,例如,这是所涵盖的字符值的大if语句。

答案 5 :(得分:0)

您可以将int转换为char。 'A'是65,所以你的输入值+ 55将是你的ASCII字符。