【问题标题】:Converting an array of single digits to an integer [closed]将单个数字数组转换为整数 [关闭]
【发布时间】:2015-01-06 06:42:45
【问题描述】:

例如:

我有一个数组 {1,5,3,6,3}

我想找到一种方法将其转换为 int 类型。

所以int x = 15363 而不是int[] d = {1,5,3,6,3}

建议?

【问题讨论】:

  • 没有简单的方法来做到这一点。您将需要一个算法来实现这一点。例如:String s = ""; for(int c: d) { s += c; } int x = Integer.parseInt(s);
  • 将x转换为字符串并拆分字符串并将拆分后的字符串转换为int
  • @KickButtowski 转换变量错误。
  • OP 想要一个数组到单个整数。
  • @shinjw 您能否将您的第一条评论转换为答案,以便我投票?这是您否认存在的“简单方法”,并且比这里的一些答案更好。

标签: java


【解决方案1】:

您需要一种算法来实现这一点。例如:

String s = ""; 
for(int c: d) { s += c; } 
int x = Integer.parseInt(s);

【讨论】:

  • 如果您要使用字符串转换方法,请使用 StringBuilder。
【解决方案2】:

1.) 遍历 int 数组。

2.) 使用 StringBuilder 附加每个数字。

3.) 最后解析数字,得到需要的结果。

 public static void main(String[] args) {
        int nums[] = { 1, 5, 3, 6, 3 };

        StringBuilder strNum = new StringBuilder(nums.length);

        for (int num : nums) {
            strNum.append(num);
        }
        int finalInt = Integer.parseInt(strNum.toString());
        System.out.println(finalInt);
    }

输出

15363

【讨论】:

  • 如果您可以解释如何 解决此类问题,并详细说明您为什么选择以您的方式实施,则此答案会更有用。否则,没有人能学到任何东西。
  • 如果您打算使用这种方法,您可能需要考虑使用StringBuilder initial size constructor。根据输入数组的大小,您可能能够在“大部分时间”获得“良好”的大小估计。
  • @JasonC 根据您的评论,添加了解释。
  • @ScottMitchell - 做你的建议没有任何意义。默认值 16 对于不会溢出 int 数据类型的任何内容都足够大。您的所有建议都是在我们计算元素时稍微放慢速度。最好写new StringBuilder()
  • ... 从计算机的角度来看,new StringBuilder(16)new StringBuilder() 相同,从人类的角度来看,它们的细微差别略有不同。软件开发的艺术之一是让您的代码与人类对话,以及与计算机对话。
【解决方案3】:

为了大声哭泣——这是一个简单的转换。不需要花哨的功能。

int[] digits = {1, 5, 3, 6, 3};
int totalNumber = 0;
for (int i = 0; i < digits.length; i++) {
    totalNumber = (totalNumber * 10) + digits[i];
}
System.out.println(totalNumber);

【讨论】:

  • +1 向我展示了明显的解决方案,我想不出!仍然不会把Math.pow() 看成花哨的:)
  • 如果溢出对您的用例很重要,请再次注意溢出。
【解决方案4】:

这里是基于数学的方法:

像 15363 这样的数字可以这样看:

1*10^4 + 5*10^3 + 3*10^2 + 6*10^1 + 3*^10^0

这里的算法使用Math.pow方法来计算10^xx的十次方

int[] digits = {1, 5, 3, 6, 3};
int totalNumber = 0;

for (int i = 0; i < digits.length; i++) {                  
    totalNumber += digits[i] * Math.pow(10, digits.length-(i+1));
}
System.out.println(totalNumber);

【讨论】:

  • 这种方法应该比基于字符串的方法更有效,但要注意溢出(假设溢出是不希望的)。
  • 好点(将int 用于totalNumber 时有一种不好的感觉,但忽略了它:) 我想这是将int数组转换为一个数字时每种方法的总体关注点
  • 是的,溢出始终是一个问题,但其他解决方案可能会正确处理它。例如,使用Integer.parseInt 的解决方案将引发溢出异常。
【解决方案5】:

一种(非常低效的)方法是从您的整数数组中构建一个String,然后使用Integer.parseInt() 将其转换为int

实际上,您真的不想进行这种转换,尤其是大规模转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2013-03-25
    • 2020-01-03
    • 1970-01-01
    相关资源
    最近更新 更多