2017-03-02 67 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配列に挿入できると思いました。私はこれをどうやって行うのかわからないので、これにアプローチする方法や指針は本当に感謝しています。先にありがとう文字列を2次元配列に変換するJava

+0

正しい軌道に乗っていれば、何か試してからコードを投稿すると修正されます。 – SQLMason

+0

私はJava @ DanAndrews – cuber

+0

で行ったことが二重に変換されてから除算とリマインダを使用して各整数を別々に取得して2darrayに入れることができます –

答えて

3

2次元配列を1つのライナーで得ることができます:

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

これもうまくいきます。 1行、私は多くの正規表現を知っていませんが、それは仕事を終わらせる:) – cuber

+1

非常に素晴らしいソリューション! – SQLMason

0

あなたの文字列には4つの繰り返し要素が必要であることがわかっているので、私は4回繰り返した後に新しい値が続くと仮定します。だから、それはN×4のアレイのように思える。

このようにすれば、私は擬似コードを使ってあなたを手伝うことができます。

のint [] [] MyArrayという=新しいint型[str.length/4]私たちは "000011112222" 私達の全体の長さが12 12/4である持っている場合である知っているので、[4]

を私たちは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; 
     } 
} 

ここで私は1つのfor-loopに固執しようとしました。私は二重のfor-loopでそれを行うことを考えていましたが、最初は空の配列を扱っているので、この場合はどうやってアプローチするのかは分かりませんでした。

クイック編集、あなたができることの1つ、btw。ように2Dのリストを作るです:

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'; 
    } 
} 

用心、この関数は一つだけcharが選ばれているとして、あなたの番号は、一桁である場合にのみ動作します。https://www.compilejava.net/でテスト

+0

数字が4回繰り返されているかどうかを確認することは本当に心配していません。されていることが保証されています。私はちょうどその刺し傷を取ってそれをそれの配列に変える方法を考えています[6] [4] – cuber

+0

さて、私はそれを説明しましょう。 1)Stringクラス関数toCharArray()を使用して文字列をchar配列に変換します。 – vk3105

+0

私はそれをやった – cuber

1

はまた、あなたがより別の何かがあれば動作します:

を私は数字0-5と各番号と24の長さの文字列を入力し はラインに

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); 
    } 
} 
を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] 
[] 
[] 
[] 
[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

をその部分を考え出しましたか? – cuber

+0

NPEのことを知っていますか? 'ints [c] .add(c)'行は 'c 'に何も追加していません – cuber

関連する問題