我是这个网站上的新手,如果我在这里,那是因为我在网络上的任何地方都没有找到答案并相信我:我一直在谷歌搜索相当长的一段时间但我能找到的只是如何将数字转换为数组而不是其他方式。 我正在寻找一种简单的方法或函数来将int数组转换为int数。让我解释一下例如我有这个:
int[] ar = {1, 2, 3};
我希望有这个:
int nbr = 123;
在我看来,它看起来像这样(即使我知道这不是正确的方式):
int nbr = ar.toInt(); // I know it's funny
如果您对我如何做到这一点有所了解,那就太棒了。
答案 0 :(得分:11)
以0
的结果开头。遍历int
数组的所有元素。将结果乘以10
,然后从数组中添加当前数字。在循环结束时,您有结果。
这可以通过将基数从10
(此处)更改为其他内容(例如{16}的十六进制代码)来推广任何基础。
答案 1 :(得分:4)
首先,您必须将每个数字转换为字符串,然后连接字符串并将其解析为整数。这是一个实现:
int arrayToInt(int[] arr)
{
//using a Stringbuilder is much more efficient than just using += on a String.
//if this confuses you, just use a String and write += instead of append.
StringBuilder s = new StringBuilder();
for (int i : arr)
{
s.append(i); //add all the ints to a string
}
return Integer.parseInt(s.toString()); //parse integer out of the string
}
请注意,如果任何超过数组中第一个值的值为负值,则会产生错误,因为减号会干扰解析。
此方法适用于所有正整数,但如果您知道数组中的所有值只有一位数(如您的示例中所示),则可以完全避免字符串操作并仅使用基本数学:
int arrayToInt(int[] arr)
{
int result = 0;
//iterate backwards through the array so we start with least significant digits
for (int n = arr.length - 1, i = 1; n >= 0; n --, i *= 10)
{
result += Math.abs(arr[n]) * i;
}
if (arr[0] < 0) //if there's a negative sign in the beginning, flip the sign
{
result = - result;
}
return result;
}
如果超过第一个值的任何值都是负数,则此版本不会产生错误,但会产生奇怪的结果。
没有内置函数来执行此操作,因为数组的值通常表示不同的数字,而不是数字中的数字。
编辑:
在回复您的评论时,请尝试使用此版本来处理多头:
long arrayToLong(int[] arr)
{
StringBuilder s = new StringBuilder();
for (int i : arr)
{
s.append(i);
}
return Long.parseLong(s.toString());
}
编辑2:
回应你的第二条评论:
int[] longToIntArray(long l)
{
String s = String.valueOf(l); //expand number into a string
String token;
int[] result = new int[s.length() / 2];
for (int n = 0; n < s.length()/2; n ++) //loop through and split the string
{
token = s.substring(n*2, (n+2)*2);
result[n] = Integer.parseInt(token); //fill the array with the numbers we parse from the sections
}
return result;
}
答案 2 :(得分:3)
int toInt(int[] array) {
int result = 0;
int offset = 1;
for(int i = array.length - 1; i >= 0; i--) {
result += array[i]*offset;
offset *= 10;
}
return result;
}
我认为它背后的逻辑非常简单。你只需要遍历数组(最后一个元素),然后将数字乘以10“的正确幂,将数字放在正确的位置”。最后,您将获得返回的号码。
答案 3 :(得分:2)
int nbr = 0;
for(int i = 0; i < ar.length;i++)
nbr = nbr*10+ar[i];
最后,你最终得到了你想要的nbr。
对于你给我们的新阵列,试试这个。我没有看到使用某种形式的String的方法,你将不得不使用long,而不是int。
int [] ar = {2, 15, 14, 10, 15, 21, 18};
long nbr = 0;
double multiplier = 1;
for(int i = ar.length-1; i >=0 ;i--) {
nbr += ar[i] * multiplier;
multiplier = Math.pow(10, String.valueOf(nbr).length());
}
如果你真的想避免使用String(不知道为什么),我想你可以使用
multiplier = Math.pow(10,(int)(Math.log10(nbr)+1));
只要数组中的最后一个元素不是0,就可以工作。
答案 4 :(得分:1)
您必须在数组中循环并添加正确的值。 正确的值是数组中的当前元素乘以10 ^位置。
所以:ar [0] * 1 + ar [1] * 10 + ar [2] * 100 + .....
int res=0;
for(int i=0;i<ar.length;i++) {
res=res*10+ar[i];
}
或者
for(int i=0,exp=ar.length-1;i<ar.length;i++,exp--)
res+=ar[i]*Math.pow(10, exp);
答案 5 :(得分:0)
使用此方法,使用long,因为输入对于int来说很大。
long r = 0;
for(int i = 0; i < arr.length; i++)
{
int offset = 10;
if(arr[i] >= 10)
offset = 100;
r = r*offset;
r += arr[i];
}
这将检查当前int是否大于10以将偏移重置为100以获得所需的额外位置。如果您包含值&gt; 100你还需要增加额外的偏移量。
由于字符串的所有掉线而把这个放在我的帖子的末尾......这是一个完全正确的答案...... OP从来没有要求最有效的方法来做到这一点只是回答了一个答案
将数组循环追加到数组中每个int的String,然后将字符串解析回int
String s = "";
for(int i = 0; i < arr.length; i++)
s += "" + arr[i];
int result = Integer.parseInt(s);
根据您的评论,int
您的号码太长,您需要使用long
String s = "";
for(int i = 0; i < arr.length; i++)
s += "" + arr[i];
long result = Long.parseLong(s);
答案 6 :(得分:0)
如果您可以使用Java 1.8,则流API非常简单:
@Test
public void arrayToNumber() {
int[] array = new int[]{1,2,3,4,5,6};
StringBuilder sb = new StringBuilder();
Arrays.stream(array).forEach(element -> sb.append(element));
assertThat(sb.toString()).isEqualTo("123456");
}