繁体   English   中英

Java; int []转换为int

[英]Java; int[] to int

如何将整数数组转换为整数,但采用特殊方式?

例如,如何将{1,9,9,0}转换为1990?

这适用于任何大小的整数数组

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);
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

看到不必要的复杂解决方案(包括Math.powString等)感到很Math.pow 。即使是正则表达式和第三方库也出现了!

您只需要一个循环并乘以10:

int num = 0;
for (int a : arr) {
  num = 10*num + a;
}

当然,这假设arr的元素在0-9范围内; 但是无论如何,这种情况之外的正确行为还是无法定义的。

它还假定可以将数组的数字转换为整数而不会发生溢出。 但是由于该问题询问有关转换为整数的问题,因此溢出行为也未定义。


请注意,可以通过计算将num移位多少位数来以类似于字符串串联解决方案的方式处理“ element> 9”的情况:

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;
}

我认为这不是处理元素中多个数字的最合适方法; 至少应指定行为。 我只是指出您不需要使用字符串来处理它。

我不确定使用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);

假设您在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)));

采用:

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。

Arrays.toString(nums).replaceAll("\\D+","");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM