如何将整数数组转换为整数,但是以特殊方式?
例如,我如何将{1,9,9,0}转换为1990?
答案 0 :(得分:17)
这适用于任何大小的整数数组
int nums[] = { 1, 9, 9, 0 };
StringBuilder strNum = new StringBuilder();
for (int num : nums)
{
strNum.append(num);
}
int finalInt = Integer.parseInt(strNum.toString());
System.out.println(finalInt);
答案 1 :(得分:6)
int[] array = {1,9,9,0};
int result = 0;
for(int i = 0; i < array.length; i++) result += Math.pow(10,i) * array[array.length - i - 1];
System.out.println(result);
Output: 1990
答案 2 :(得分:2)
看到涉及Math.pow
,String
等的不必要复杂的解决方案令人沮丧。即使是正则表达式和第三方库也会出现!
你需要的只是一个循环并乘以10:
int num = 0;
for (int a : arr) {
num = 10*num + a;
}
这当然假设arr
的元素在0-9范围内;但是,无论如何,在这种情况之外的正确行为是不确定的。
它还假设数组的数字可以转换为没有溢出的整数;但由于问题是要求转换为整数,溢出行为也是未定义的。
请注意,您可以按照与string concatenation solution类似的方式处理“element&gt; 9”案例,方法是计算您需要移位num
的位数:
int num = 0;
for (int a : arr) {
if (a < 0) throw new IllegalArgumentException();
int i = a;
do {
num *= 10;
i /= 10;
} while (i != 0);
num += a;
}
我不认为这是处理元素中多位数的最合适方式;至少应该指定行为。我只是指出你不需要使用字符串来处理它。
答案 3 :(得分:1)
我不确定Java,但是在伪.NET代码中:
String value = "";
for (int i = 0; i < array.length; i++)
{
value += array[i]; // Build out the number as a string
}
int someInt = Integer.parseInt(value);
答案 4 :(得分:1)
假设您有Integer[]
中的数字而不是原始int[]
并且Commons Lang Library,您可能会发现以下一个有用的内容
Integer[] array = {1, 9, 9, 0 };
System.out.println(Integer.valueOf(StringUtils.join(array)));
或者,如果整数太大而无法放入int
使用BigInteger
Integer[] piDigits = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2,
3, 8, 4, 6, 2, 6, 4, 3, 3, 8, 3, 2, 7, 9, 5, 0, 2, 8, 8, 4, 1,
9, 7, 1, 6, 9, 3, 9, 9, 3, 7, 5, 1, 0, 5, 8, 2, 0, 9, 7, 4, 9,
4, 4, 5, 9, 2, 3, 0, 7, 8, 1, 6, 4, 0, 6, 2, 8, 6 };
System.out.println(new BigInteger(StringUtils.join(piDigits)));
答案 5 :(得分:0)
使用:
public void turnArrToInt(int x[]){
for(int i = 0; i < x.length; i++){
number += x[i]*Math.pow(10,x.length-i-1);
}
这就是我实现它的方式。它接受每个元素,如果它是数组的第一个,则将它乘以10 ^(数组的长度 - 1 - theCurrentElement)并将其全部添加到结果中。它适用于所有尺寸。基本上将第100个乘以100,将第10个乘以10,依此类推。
例如:char = {1,2,3}会将1乘以100 2乘以10 3乘以1得到所有的总和并得到123.
答案 6 :(得分:0)
Arrays.toString(nums).replaceAll("\\D+","");