2016-05-04 52 views
-2

这是我的数组,它由整数数组组成。实际上,这些是我的HashMap的关键,它由一些句子组成或者说一个完整段落的“STRING”作为一个关键值对。现在我想按照给定的顺序依次从整数数组中取出这些句子。Java:我想将整数数组转换为数学数字

int[] arr = {3, 2, 0, 5, 3}; 

HashMap<Integer, String> h = new HashMap<Integer, String>() {{ 
     put(0,"This is my third sentence."); 
     put(3,"This is my first sentence."); 
     put(5,"This is my forth sentence."); 
     put(2,"This is my second sentence."); 
}}; 

最终的输出应该是所有的罪并罚提到秩序和outout应该像一个段落:

这是我第sentence.This是我的第二sentence.This是我的第三句话。 这是我的第四句话。这是我的第一句话。

+3

这只需要1个循环,就是这样。你试过什么了? – Aakash

回答

1

虽然很简单,但您应该尝试过自己。 仍然提供解决方案,只需调试并理解它。

工作代码

public static void main(String[] args) throws Exception { 
     int[] arr = {3, 2, 0, 5, 3}; 

     StringBuilder numberStr = new StringBuilder(); 
     for (int item : arr) { 
      numberStr.append(item); 
     } 
     int finalInt = Integer.parseInt(numberStr.toString()); 
     System.out.println(finalInt); 
    } 

输出

32053 
2
int number = Integer.parseInt(Arrays.stream(arr).mapToObj(String::valueOf).collect(Collectors.joining())); 
+1

我正在考虑用这种方式编写它。 – rekire

1

首先阵列转换成字符串通过附加元件逐个和转换字符串转换成整数。试试这个代码:

public class NewClass63 { 
public static void main(String args[]){ 
int[] arr = {3, 2, 0, 5, 3}; 
StringBuffer s = new StringBuffer(); 
    for(int i=0;i<arr.length;i++){ 
     s.append(arr[i]); 
    } 
int x = Integer.parseInt(s.toString()); 
    System.out.println(x); 
} 
} 
3

相反的值转换为字符类型,你可以执行数学。对于阵列中的每个数字,相应的幂为10是数组长度(减1)减去索引(因为Java阵列使用基于0的索引并且最后一个数字对应于10 )。像,

int[] arr = { 3, 2, 0, 5, 3 }; 
int result = 0; 
for (int i = 0; i < arr.length; i++) { 
    result += arr[i] * Math.pow(10, arr.length - i - 1); 
} 
System.out.println(result); 

输出是(如预期)

32053 
优化

这是可能的优化的代码进一步通过保持10的当前功率除以10而迭代的每个位。这也将使得像

int[] arr = { 3, 2, 0, 5, 3 }; 
int result = 0; 
int pow = (int) Math.pow(10, arr.length - 1); 
for (int digit : arr) { 
    result += digit * pow; 
    pow /= 10; 
} 
System.out.println(result); 

或者使用for-each loop的,从右通过10在每次迭代到左和繁殖pow迭代的数字。这可能看起来像,

int result = 0; 
int pow = 1; 
for (int i = arr.length - 1; i >= 0; i--) { 
    result += arr[i] * pow; 
    pow *= 10; 
} 

和上面的也可能是这样写

int result = 0; 
for (int i = arr.length - 1, pow = 1; i >= 0; i--, pow *= 10) { 
    result += arr[i] * pow; 
} 
+1

我不确定,但我会猜测pow调用很贵。我会在每个循环中将它乘以10。 – rekire

+0

@rekire果然,我添加了一个*优化的*版本。 –

+1

更好的是,迭代使用for循环(而不是每个)从最后一个索引到第一个,每次乘以十 - 这样你就不必为第一个索引找到你需要的最终的十个幂,因此完全消除'Math.pow'调用。 –

2

还有一种方法:

int[] arr = {3, 2, 0, 5, 3}; 
int i = Integer.parseInt(Arrays.toString(arr).replaceAll("[\\[,\\] ]", "")); 
System.out.println(i); // prints 32053 
1

使用一个循环:

 int[] arr = { 3, 2, 0, 5, 3 }; 
     String itotal = ""; 
     for (int i = 0; i < arr.length; i++) 
     { 
      itotal=itotal + String.valueOf(arr[i]); 
     } 
     int a = Integer.parseInt(itotal); 
1
int[] array = {3,2,0,5,3}; 
String x = ""; 
for(int i = 0;i<=array.length-1;i++){ 
    x = x + String.valueOf(array[i]); 
} 
System.out.println(Integer.parseInt(x)); 
+0

这应该做的工作。 – user2966968

0

存在各种方式。 如果我是对的,隐藏的假设是整数数组的较高元素与结果整数的较高数字匹配。

int[] arr = {3, 2, 0, 5, 3}; 
int result = 0; 
int power = (int) Math.pow(10, arr.length-1); 
for(int element : arr){ 
    result += element * power; 
    power /= 10; 
} 
0

最简单的解决方法是回答这个问题。假设,示例中的每个字母都是单个数字。

  1. 空数组{}:预期值= 0
  2. {A}:预期值= A
  3. {A,B}:预期值= 10 * A + B
  4. {A,B ,C}:预期值= 10 *(10 * A + b)+ C

代码:测试此是online java compiler IDE

public class ConvertDigitArrayToNumber { 
    public static void main(String[] args) { 
    int[] arr = {3, 2, 0, 5, 3}; 
    int value = 0; 
    for (int i = 0; i < arr.length; i++) { 
     value = (10*value) + arr[i]; 
    } 
    System.out.println(value); 
    } 
} 

这实际上比其他的更简单和更好的解决方案。

  • 只有简单的乘法和加法(没有权力)。
  • 没有字符串转换