从九进制转换为十进制

3
我正在从基础开始学习Java,并设立了自己的初始目标来构建一个进制转换器,但现在我遇到了困难:
当它执行以下操作时:numero=numero+(mult*c) 初始值numero0c4mult1,然后下一个numero变为52而不是4,也许我混淆了字符串和整数类型?
 public class nintodec {
    public static void main(String[] args) {
        int number;
        System.out.println("enter base nine number");
        number = 1234;
        int num = number;
        String cadena = "";
        int numero = 0;
        cadena = String.valueOf(num);
        cadena = Integer.toString(num);
        String reverse = new StringBuffer(cadena).reverse().toString();
        int mult = 1;
        for (int i = 0; i < reverse.length(); i++) {
            char c = reverse.charAt(i);
            System.out.println("  c:" + c + "  mult:" + mult);
            numero = numero + (mult * c);
            System.out.println("   numero" + numero);
            mult = mult * 9;
        }
        System.out.println(numero);

        //when its gonna do: `numero=numero+(mult*c)` initially numero is 0, c is 4 and mult is 1 and then next numero becomes 52 instead of 4

有需要帮忙的吗?

3个回答

0

学习Java不错,继续加油!

你的问题在于c不是4而是'4',它是一个ASCII值为52的字符。你需要将它转换为整数。

此外,你真的不需要使用字符串来解决这个问题,尝试使用模运算,会更加简洁。


0

char c = '4' 的 ASCII 值是多少?它是 52。你需要将它转换回整数。

int value = (int)c.charValue();

numero = numero + (mult * c);
System.out.println("   numero" + numero);
mult = mult * 9;

这句话的字面意思是:

0 = 0 + (1 * 52),因为字符 c = '4' 的 ASCII 值为 52。

将这行代码:numero = numero + (mult * c) 翻译成:numero = numero + (mult * value),其中 value 是表达式 int value = (int)c.charValue();

int value = (int)c.charValue(); 取自用户SLaks这个问题中的回答。


0

只是为了说到重点,为什么 c 是< c ode> 52 而不是< code> 4 :

在行中

   numero = numero + (mult * c);

c 是一个字符,所以 c 实际上是 '4' 而不是 4。你必须取得 字符 4 ('4') 的整数等价值。

最快的方法是减去 48(ASCII 值为 0),因为当你从 '4' 中减去 '0' 时,就会得到

    '4' - '0'

将会给你从'0''4'的偏移量,这相当于从04的偏移量,即4

所以你的代码行将被更改为:

       numero = numero + (mult * (c-48));

一个免费的建议:有更好的方法来完成你想要做的事情,既然你正在学习,尝试先完成它,然后再用更好的方式实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接