2017-03-02 136 views
1

我正在一個程序,我從用戶的輸入,我輸入24長度String與數字0-5和每個數字在該行重複4次。一個例子就是這樣的000011112222333344445555。我意識到當我收集用戶的號碼時,我無法在2d int array of [6][4]中收到號碼。這是我想要的,所以我想要做的就是取出該字符串,並將每個數字放在該數組中。所以它看起來像這樣[[0,0,0,0],[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4],[5,5,5,5]]。我不知道如何讓它們進入像這樣的數組。我知道字符串是不可變的,所以我不能改變字符串,但我確實認爲我可以把字符串變成char數組,然後將每個值插入到我想要的int數組中。我不知道如何做到這一點,任何幫助或指導如何解決這個問題將非常感激。在此先感謝取一個字符串,並把它變成一個二維數組Java

+0

你在正確的軌道上,嘗試的東西,然後張貼代碼,我們會解決它。 – SQLMason

+0

好吧,我想即將分毫不差什麼,因爲它的東西我在Java中@DanAndrews所做 – cuber

+0

轉換成翻番,然後利用模量,這樣就可以分別得到每個整數用分提醒,放入和2darray –

回答

3

你可以用一個襯墊讓你的二維數組:

int[][] numbers = Arrays.stream("000011112222333344445555".split("(?<=\\G.{4})")).map(s -> (Arrays.stream(s.split("(?<=\\G.{1})")).mapToInt(Integer::parseInt).toArray())).toArray(int[][]::new); 
+1

這也行不通,真棒,你能夠做到這一切一行,我不知道很多正則表達式,但它完成了工作:) – cuber

+1

非常好的解決方案! – SQLMason

0

所以,你知道你的字符串必須有4個重複元素,我假設4次重複後,一個新的值如下。對我來說,它看起來像一個N×4陣列。

因此你可以這樣做,現在我將僞代碼來指導你。

INT [] [] myArray的=新INT [str.length/4] [4]

我們把四個,因爲我們知道,如果我們有 「000011112222」 我們的總長度爲12 12/4是3,我們期望3列。 4是我們擁有的柱子數量,我們知道它將只有4.

之後,在這裏我假設你是一個接一個地輸入值,沒有任何分隔符。我們可以這樣做:

int col = 0; 
    int row = 0; 
for(i from 0 to string length) { 
    if((I+1) % 4 != 0) { 
     //keep adding to myArray[row][col] 
     //row++ 
     } 
    } else { // so we now hit new numbers 
     col++; 
     row = 0; 
     } 
} 

所以在這裏我試圖堅持只有一個for-loop。我正在考慮用雙for循環來做這件事,但我不確定在這種情況下我會如何處理它,因爲我們最初正在處理一個空數組。

快速編輯,你可以做的一件事,順便說一句。是做一個二維表像這樣:

List<List<String>> strings = new ArrayList<List<String>>() 

int index = 0; 
while (index < text.length()) { 
    String pattern = text.substring(index, Math.min(index + 4,text.length())); 
    List<String> splitPattern = Arrays.asList(pattern.split("")); 
    strings.add(splitPattern); 
    index += 4; 
} 

所以這裏的邏輯是,我們做一個字符串,將它的「」所以沒有什麼。換句話說它只會產生0,0,0,0作爲分隔符是什麼。然後我們將它添加到我們的列表列表中,並通過說strings.get(I).get(j);來訪問它。

1

所以它相當容易做的事情。

lets assume your string is str; 

char[] strArr = str.toCharArray(); 

// numbers is the range like 0 to 5 here. 
// repeatCount is how many times its repeating like 4 here. 

int arr[][] = new int[numbers][repeatCount]; 

for(int i = 0; i < numbers; i++){ 
    for(int j = 0; j < repeatCount; j++){ 
     arr[i][j] = strArr[i*repeatCount + j]-'0'; 
    } 
} 

最後一項預防措施,如果你的數字是個位數,因爲只有一個字符被選擇這個功能纔有效。

+0

我並不是真的擔心如果數字重複4次,而他們是0-5,因爲他們總是確保是。我只是想知道如何採取這一措施,並把它變成一個[6] [4] – cuber

+0

的數組好吧,讓我解釋一下。 1)使用String類函數toCharArray()將字符串隱藏到char數組中。 – vk3105

+0

我已經完成了 – cuber

1

測試在https://www.compilejava.net/同樣適用,如果你有不同的東西比:

我的輸入與數字0-5 24長度的字符串,並且每個數字是 在線路重複4次

import java.util.ArrayList; 
public class HelloWorld 
{ 

    public static void main(String[] args) 
    { 
    String s = "00001111222233334444555599"; 
    ArrayList<ArrayList<Integer>> collection = new ArrayList<ArrayList<Integer>>(); 
    for (int i = 0; i <= 9; i++){ 
     collection.add(new ArrayList<Integer>()); 
    } 

    for (int i = 0; i < s.length(); i++){ 
     int c = Character.getNumericValue(s.charAt(i));   
     collection.get(c).add(c); 
    } 

    for (int i = 0; i <= 9; i++){ 
     System.out.println(collection.get(i)); 
    } 

    System.out.println(collection); 
    } 
} 

結果:

[0, 0, 0, 0] 
[1, 1, 1, 1] 
[2, 2, 2, 2] 
[3, 3, 3, 3] 
[4, 4, 4, 4] 
[5, 5, 5, 5] 
[] 
[] 
[] 
[9, 9] 
[[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5], [], [], [], [9, 9]] 
+0

什麼'int'的尺寸來完成引用類型? – cuber

+0

它是否正確,你是否知道NPE's?ints [c] .add(c)'不會將任何東西添加到'c' – cuber

相關問題