【问题标题】:Java; int[] to int爪哇; int[] 到 int
【发布时间】:2011-08-24 03:52:43
【问题描述】:

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

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

【问题讨论】:

  • 如果任何给定的数组元素超出范围[0, 9],预期的行为是什么?这是作业吗?到目前为止,您尝试过什么?

标签: java arrays integer


【解决方案1】:

看到不必要的复杂解决方案令人沮丧,涉及Math.powString 等。甚至正则表达式和第三方库也出现了!

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

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

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

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


请注意,您可以用与string concatenation solution 类似的方式处理“元素> 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;
}

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

【讨论】:

  • 在我看来,这是最简单的方法,不会像双重转换那样浪费性能(从 int 到 string,然后再到 int)
【解决方案2】:

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

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

【讨论】:

  • 转换为String,而不是整数。
  • 在底部添加一个 Integer.valueOf() 应该可以解决问题。
  • 此解决方案比将数字限制为单个数字更正确和通用。
  • @Matt:这不是例外的重点。也就是说,例外不能解决信息不足的问题。您可能会争辩说,如果您知道正确的数据,那么例外是合适的,但 CustomerWasVague 例外并不能解决任何问题。
  • 您应该将 strNum 更改为 StringBuilder。 Concatenating Strings in a loop is a very bad idea.
【解决方案3】:
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

【讨论】:

  • 因为我和其他人在其他帖子中概述的原因,这是一个糟糕的解决方案,除了这个版本的可读性更差。
  • @Stefan:就你所知,这可能正是我们想要的行为(尽管我同意它不如删除的行为那么优雅)。问题中的任何内容都无法让我们在此方法和字符串连接方法之间做出决定。
【解决方案4】:
Arrays.toString(nums).replaceAll("\\D+","");

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

      • 这就像您直接复制并粘贴肖恩的答案,但您不使用示例数据做得更糟。
      • @Stefan Kendall 呵呵。我在他发布时正在写我的答案-但感谢您的评论。
      【解决方案7】:

      用途:

      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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-21
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        相关资源
        最近更新 更多