十进制转换错误

我正在编写一个程序,将八进制数转换为小数。 它编译正确和一切,但我的转换代码有一些重大错误。 对我来说这似乎是完全合乎逻辑的,但不管怎样,当我运行程序时,转换是错误的(即1转换为36),有人可以指出出了什么问题吗?

public static int convert(int octal) { int d1=0,d2=0,d3=0,d4=0,d5=0,d6=0,d7=0,d8=0; if(octal >=9999999){ d8 = (octal-(octal%10000000));} if(octal >=999999){ d7 = (octal-(octal%1000000));} if(octal >=99999){ d6 = (octal-(octal%100000));} if(octal >=9999){ d5 = (octal-(octal%10000));} if(octal >= 999){ d4 = (octal-(octal%1000));} if(octal >= 99){ d3 = (octal-(octal%100));} if(octal >= 9){ d2 = (octal-(octal%10));} if(octal >= 0){ d1 = (octal-(octal%1));} octal = (d8 * 8^7) + (d7 * 8^6) + (d6 * 8^5) + (d5 * 8^4) + (d4 * 8^3) + (d3 * 8^2) + (d2 * 8^1) + (d1 * 8^0); return octal; } 

这只是我的转换方法,我的主要方法是收集int八进制;

这就是问题:

 8^7 

^运算符不会按照您的想法执行。 它做二进制XOR ……

但是,我会说整个设计显然是可疑的。 int值不是“in”八进制或任何其他基数 – 它只是一个整数。 数字10是数字10,无论是十进制的“10”,hex的“A”还是八进制的“12”。 如果您有一个要解析为八进制数字的字符序列,则该方法的输入应为String ,而不是int

由于您的方法接受一个整数(通常以字符串表示forms表示为十进制),并且您输出的内容也是一个整数,您实际上并没有变成“八进制整数”,您已将其更改为其他整数完全。 您正在尝试将整数正确转换为八进制,然后错误地将该八进制解释为十进制。

如果希望将整数转换为八进制字符串表示forms,则只需使用以下方法:

 public static String convert(int number) { Integer.toOctalString(number); } 

而且,如果你真的想要返回一个表示该八进制字符串的int,就像它是十进制一样,你可以简单地这样做:

 public static int convert(int number) { return Integer.parseInt(Integer.toOctalString(number)); } 

如果您有重复的代码,您可能会考虑循环。

 public static void main(String... args) { for (long i = 7, j = 7; i > 0; i = i * 10 + 1, j = j * 8 + 1) { long c = convert(i); if (c != j) throw new AssertionError(i + ": " + c + " != " + j); System.out.println(i + " = > " + j); } } public static long convert(long octal) { long ret = 0; for (long i = 1000000000000000000L, j = 1L << (3 * 18); i > 0; i /= 10, j >>= 3) ret += j * (octal / i % 10); return ret; } 

版画

 7 = > 7 71 = > 57 711 = > 457 7111 = > 3657 71111 = > 29257 711111 = > 234057 7111111 = > 1872457 71111111 = > 14979657 711111111 = > 119837257 7111111111 = > 958698057 71111111111 = > 7669584457 711111111111 = > 61356675657 7111111111111 = > 490853405257 71111111111111 = > 3926827242057 711111111111111 = > 31414617936457 7111111111111111 = > 251316943491657 71111111111111111 = > 2010535547933257 711111111111111111 = > 16084284383466057 7111111111111111111 = > 128674275067728457 

你有一个潜在的误解,这会让你不断上瘾。

本身没有“八进制数”这样的东西。 int不是十进制,罗马数字或八进制 – 它只是一个数字。

“八进制数”实际上意味着“包含数字的八进制表示的字符串”。