2010-04-27 51 views
1

我有一個數組:分割整數

int test[]={10212,10202,11000,11000,11010}; 

我想將INETGER值劃分到各個數字和它們放置在一個新的數組作爲單獨的元件,從而使我的數組現在是:

int test2[]={1,0,2,1,2,1,0,2,0,2,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0}; 

我該怎麼做呢?我在java中這樣做。

謝謝。

+0

都爲數字的10000 - 19999範圍?或者:領先的零如何? – rsp 2010-04-27 16:03:50

回答

10
int[] test={10212,10202,11000,11000,11010}; 
ArrayList<Integer> test2 = new ArrayList<Integer>(); 


for(int i = test.length -1; i >= 0; i--){ 
    int temp = test[i]; 
    while(temp>0){ 
     test2.add(0, temp%10); //place low order digit in array 
     temp = temp /10;  //remove low order digit from temp; 
    } 
} 

這將不正是你想要的東西放置一個條目的最低位到一個ArrayList的「前」,因此,在以前的低四位/項的前面。

如果你需要它在一個數組中,ArrayList有一個toArray方法。

+1

這比Jack的解決方案更具有內存效率,因爲不需要中間字符串,但是一些開發人員可能更難以理解它。在大多數情況下,我會和傑克一起去的,但我正在投票。 – 2010-04-27 16:27:35

+1

我不明白什麼是如此困難的經歷一個數組倒退或基本的整數操作。這與倒計時或五年級數學一樣基本。 - 但是,閱讀for-statement可能會很棘手,如果你不習慣它。 – CheesePls 2010-04-27 16:34:06

+0

@ neilwhitaker1:如果開發人員在理解這段基本代碼時遇到問題,那麼他們顯然不是數學導向的**(因爲這是非常基本的),也許他們應該開始學習或尋找其他工作; ) – SyntaxT3rr0r 2010-04-27 16:57:06

0

你會取每個整數,除以10,並將餘數中的小數部分分開。將該分數乘以10再次作爲整數並將其放入您的新數組中。重複,直到數字用完。重複直到輸入數組中的整數用完。

+0

使用mod 10可以防止浮點算術。 – rsp 2010-04-27 16:05:03

+0

另外,你最終會使用這個方法或@ Timmmm的方法將每個數字的數字顛倒過來......使用基於字符串的方法會更簡單我認爲(正如Joachim指出的那樣,沒有跡象表明性能是一個問題)。 – 2010-04-27 16:17:30

0

嘗試類似這樣的事情。

{ 
    int test[]={10212,10202,11000,11000,11010}; 
    int test2[] = new int[25]; 
    int i = 24; 

    int temp; 
    for(int n = test.size() - 1; n >= 0; n--){ 
    temp = test[n]; 
    while(temp > 0){ 
     test2[i--] = test % 10; // <= Gets remainder of division by 10. 
     test /= 10; // <= Stores the integer result of the division. 
    } 
    } 
} 

我還沒有測試過這個代碼。

此代碼會忽略前導零(自然)並回填整數數組。爲陣列獲取適當的大小可能是一個問題。

5

你可以去馬克的建議,或將其轉換爲String得到個位數:

int test[]={10212,10202,11000,11000,11010}; 
ArrayList<Integer> test2 = new ArrayList<Integer>(); 

for (int i : test) 
{ 
    String str = String.valueOf(i); 
    for (int j = 0; j < str.length(); ++j) 
    test2.add((int)(str.charAt(j)-'0')); 
} 

隨着越來越多的內存使用效率的辦法,仍然涉及字符串將保留所有的數字僅作爲一個字符串並實時計算的int值:

class Digits 
{ 
    String str; 

    Digits(int[] nums) 
    { 
    StringBuilder sb = new StringBuilder(); 
    for (int i : nums) 
     sb.append(String.valueOf(i)); 

    str = sb.toString(); 
    } 

    int length() 
    { 
    return str.length(); 
    } 

    int nth(int i) 
    { 
    return (int)(str.charAt(i)-'0'); 
    } 
} 

記住,CheesePls的解決方案是在因爲它使用數學,因爲它是打算使用的。煤礦僅僅是菜鳥(和只給另一個解決問題的方法)..

+1

從字符串中來回轉換會非常低效。 – zmbush 2010-04-27 16:02:31

+2

@zipcodeman:將每個數字存儲在它自己的'int'中。那麼你有什麼意見? – 2010-04-27 16:05:51

+1

字符串不需要參與。 – zmbush 2010-04-27 16:10:29

0

這(未經測試):

int test[] = {10212,10202,11000,11000,11010}; 
ArrayList<Integer> test2 = new ArrayList<Integer>(); 

for (int i : test) 
{ 
    int p = test2.size(); 
    while (i > 0) 
    { 
    test2.add(p, i % 10); 
    i /= 10; 
    } 
} 
0

這裏是一種用繩子做到這一點。不是特別高效,但(我希望)容易理解。

package playground.tests; 

import junit.framework.TestCase; 

public class SplitIntegerTest extends TestCase { 

    public void testIntsFromOneInteger() throws Exception { 
     assertEqualArrays(new int[] { 1, 0, 2, 1, 2 }, intsFrom(10212)); 
    } 

    public void testIntsFromArray() throws Exception { 
     int test[] = { 10212, 10202, 11000, 11000, 11010 }; 

     int test2[] = { 1, 0, 2, 1, 2, 1, 0, 2, 0, 2, 1, 1, 0, 0, 0, 1, 1, 0, 
       0, 0, 1, 1, 0, 1, 0 }; 

     assertEqualArrays(test2, intsFrom(test)); 
    } 

    private int[] intsFrom(int[] input) { 
     int[][] list = new int[input.length][]; 
     for (int i = 0; i < input.length; i++) 
      list[i] = intsFrom(input[i]); 
     int n = 0; 
     for (int[] array : list) 
      n += array.length; 
     int[] result = new int[n]; 
     int index = 0; 
     for (int[] array : list) 
      for (int i : array) 
       result[index++] = i; 
     return result; 
    } 

    private static int[] intsFrom(Integer n) { 
     String s = n.toString(); 
     int[] result = new int[s.length()]; 
     for (int i = 0; i < result.length; i++) 
      result[i] = intFrom(s.charAt(i)); 
     return result; 
    } 

    private static int intFrom(Character c) { 
     return Integer.parseInt(c.toString()); 
    } 

    private static void assertEqualArrays(int[] a, int[] b) { 
     assertEquals(a.length, b.length); 
     for (int i = 0; i < b.length; i++) 
      assertEquals(a[i], b[i]); 
    } 

} 
1

幾乎一行代碼(如果我們假設有轉換字符串數組整數數組的開箱即用功能):

int test[]={10212,10202,11000,11000,11010}; 
int result[] = strArray2IntArray (
        Arrays.toString (test) 
       .replaceAll ("\\D", "") 
       .replaceAll ("(\\d)", "$1 ") 
       .split (" ") 
       ); 

private static int[] strArray2IntArray (String[] array) { 
    int[] result = new int[array.length]; 
    for (int i = 0; i < result.length; i++) { 
     result[i] = Integer.parseInt (array[i]); 
    } 
    return result; 
}