在Java String类中重新创建valueOf(double d)

时间:2014-01-16 03:58:36

标签: java string class object value-of

我创建了一个对象MyString。我无法弄清楚如何重新创建valueOf(double d)。我为整数重新创建了valueOf。为了方便起见,我将小数位数限制为8.如何重新创建valueOf(double d)?

public class MyString {

private char[] a;

public MyString(String s) {
    this.a = s.toCharArray();
}

public MyString(char[] a) {
    this.a = a;
}

public String toString() {
    return new String(a);
}

public int length() {
    return a.length;
}

public char charAt(int i) {
    return a[i];
}
    public static MyString valueOf(int i) {
    int digits = (int)(Math.log10(i)+1);
    char[] b = new char[digits];
    for (int j = 0; j < digits; j++) {
        b[j] = (char) (48 + i / 10);
        i = i % 10;
        if (i < 10) {
            b[j + 1] = (char)(48 + i);
            break;
        }
    }
    MyString ms = new MyString(b);
    return ms;
    }
public static MyString valueOf(double d) {
            char[] d1 = new char[digits];
            //Take each digit of the number and enter it into the array
            MyString ms = new MyString(d1);
    return ms;

}

public static void main(String[] args) {

}

}

2 个答案:

答案 0 :(得分:1)

我认为你这样做很有趣......所以这就是我采取的方法。你已经有了valueOf(int i),所以为什么基本上不重用那个函数。只需取两倍并继续乘以10直到你有一个int。跟踪小数位的位置,然后基本上调用valueOf(int i),但也包括小数点。

我无法运行你的代码,所以我重新执行了valueOf(int i),然后创建了valueOf(int i,int decimalSpot),为小数点传入-1或0然后它是一个整数值而不使用小数位。

无论如何,这是我想出的。已经晚了,所以可能不是最干净的代码,但应该给你一个概念证明。

public class MyString {

    private char[] a;

    public MyString(String s) {
        this.a = s.toCharArray();
    }

    public MyString(char[] a) {
       this.a = a;
    }

    public String toString() {
        return new String(a);
    }

    public int length() {
        return a.length;
    }

    public char charAt(int i) {
        return a[i];
    }

    public static MyString valueOf(int i) {
        return MyString.valueOf(i,-1);
    }

    public static MyString valueOf(double d) {
        int decimalPlace = 0;

        while (d != (int)d)
        {
            decimalPlace++;
            d = d*10;
        }

        return MyString.valueOf((int)d,decimalPlace);
    }

    public static MyString valueOf(int i, int decimalSpot) {
        int index=0;
        int digits = (int)(Math.log10(i)+1);
        int stringLength=digits;
        if (decimalSpot == 0) decimalSpot=-1; // Don't return 1234. - just return 1234
        if (decimalSpot != -1) 
        {
            // Include an extra spot for the decimal
            stringLength++;
        }
        char[] b = new char[stringLength];
        for (int j = digits-1; j >= 0; j--) {
            int power = (int) Math.pow(10,j);
            int singleDigit = (int) Math.floor(i/power);
            i = i - power*singleDigit;
            b[index++] = (char) (48 + singleDigit);

            if (decimalSpot==j)
            {
                b[index++] = '.';
            }
        }

        MyString ms = new MyString(b);
        return ms;
    }

    public static void main(String[] args) {        
        MyString ms = MyString.valueOf(12345);
        System.out.println(ms);

        ms = MyString.valueOf(12345.12313);
        System.out.println(ms);
    }

}

答案 1 :(得分:0)

不是试图为每个可能的源数据类型解决这个问题,而应该只专注于从String构造类。然后你要做的就是将这个方法和你尚未完成的所有其他方法委托给相应的String方法,取得结果String,然后使用该String构造你的对象。