我已将一些十进制数转换为二进制,八进制和十六进制系统。为此,我没有必要使用任何集合和库。所以现在我需要更改我的实现,因为我使用String来存储结果,而我应该使用char数组。
我目前的实施:
public static String convertDecimal(int number, int base){
String result = "";
while (number > 0) {
if (base == 16) {
int hexalNumber = number % base;
char hexDigit = (hexalNumber <= 9 && hexalNumber > 0) ?
(char) (hexalNumber + '0') :
(char) (hexalNumber - 10 + 'A');
result = hexDigit + result;
number = number / base;
}
if (base == 8 || base == 2) {
int remainder = number % base;
result = remainder + result;
number = number / base;
}
}
return result;
}
如何更改我的实现以便从方法返回char []?我应该完全改变转换算法的逻辑吗?
如果有任何帮助,我将不胜感激。
答案 0 :(得分:1)
String
有一种将自身转换为char[]
的方法,只需使用它:
return result.toCharArray();
答案 1 :(得分:1)
如果他们想要一个char数组,他们可能不会只喜欢
return result.toCharArray();
由于数组具有固定大小,因此可以先计算数字:
public static char[] convertDecimal(int number, int base) {
if (number < 0) {
char[] positiveResult = convertDecimal(-number, base);
char[] negativeResult = ...
return negativeResult;
} else if (number == 0) {
return new char[] { '0' };
}
int digits = 0;
int n = number;
while (n != 0) {
++digits;
n /= base;
}
char[] result = new char[digits];
for (int i = 0; i < digits; ++i) {
... result[... i ...] = ...; ++i
}
return result;
}
答案 2 :(得分:0)
我已在您的代码中对此进行了测试:
convertDecimal(7856421, 16);
对于这个电话和编辑你的代码如下(我没有删除任何一行,只添加了我添加了汽车[]):
public static String convertDecimal(int number, int base) {
char[] resultChar = new char[0];
String result = "";
while (number > 0) {
if (base == 16) {
int hexalNumber = number % base;
char hexDigit = (hexalNumber <= 9 && hexalNumber > 0) ? (char) (hexalNumber + '0')
: (char) (hexalNumber - 10 + 'A');
result = hexDigit + result;
int totalLength = resultChar.length + 1;
char[] aux = new char[totalLength];
int i = 0;
for (i = 0; i < resultChar.length; i++) {
aux[i] = resultChar[i];
}
aux[totalLength - 1] = hexDigit;
resultChar = aux;
number = number / base;
}
if (base == 8 || base == 2) {
int remainder = number % base;
result = remainder + result;
number = number / base;
}
}
return result;
}
Yo在resultChar []中反转结果(在这种情况下,你得到77E125,char []有[5,2,1,E,7,7])。现在你只需要将它倒回来。