2017-08-31 17 views
-2

char[][]と入力しました。私は可能な組み合わせを生成する必要があり、各char配列は対応する位置のシンボルを提供します。例えば:この入力データを使用してシンボルの組み合わせはどのように生成されますか?

char[][] symbols = new char[][] { 
      {'M', 'm'}, 
      {'o', '0'}, 
      {'i', 'l', '|', 'e'}, 
      {'s', '$'} 
    }; 

を生成する必要があります。

Mois 
Moi$ 
Mols 
Mol$ 
MoLs 
... 
m0e$ 

私は、文字列よりも、正しい配列から正しいシンボルを更新し、構築するためにアレイの状態を作る方法トラブルんです。

+0

"デカルト製品" – MBo

答えて

3

ループのために使用して非常に滑らかでないが、作業溶液:

public static void main(String... args) throws ParseException { 
    char[][] symbols = new char[][] { { 'M', 'm' }, { 'o', '0' }, { 'i', 'l', '|', 'e' }, { 's', '$' } }; 
    String s = "1234"; 
    for (int i = 0; i < symbols[0].length; i++) { 
     s = s.replace(s.charAt(0), symbols[0][i]); 
     for (int j = 0; j < symbols[1].length; j++) { 
      s = s.replace(s.charAt(1), symbols[1][j]); 
      for (int k = 0; k < symbols[2].length; k++) { 
       s = s.replace(s.charAt(2), symbols[2][k]); 
       for (int l = 0; l < symbols[3].length; l++) { 
        s = s.replace(s.charAt(3), symbols[3][l]); 
        System.out.println(s); 
       } 
      } 
     } 
    } 

} 

あなたが見ることができるように、これはどのくらいの期間に応じて、急速に成長します文字列が最後になります。したがって、他の解決策がはるかに優れています。 @alirabieeの回答をお勧めします

3

は、あなたは以下のようにコンピュータの機能を定義することによってこれを行うことがあります。あなたのシンボルの配列は、クラスのフィールドである必要が

void compute(String combo, Integer i) { 
    if (i == symbols.length) { 
     System.out.println(combo); 
    } 
    else { 
     for (int j = 0; j < symbols[ i ].length; j++) { 
      compute(combo + symbols[ i ][ j ], i + 1); 
     } 
    } 
} 

注意を、そうでない場合、あなたはそれを少し変更する必要があります。次に、以下のような組み合わせを印刷し、それを呼び出すことができます:

this.compute("", 0); 
関連する問題