2016-11-01 25 views
0

私は順列を持つコードを持っています。このコードを実行すると、同じ値を持つ複数の結果が返されます。
同じ結果を返さず、繰り返しを中断したいと思います。繰り返しのない順列コード

これは私のコードです:

public class Teste { 

    private static final char[] MP = new char[] {'i', 't', '@', 'r', 'm', 't', 'z', 'c', 'r', '.', 'c', 'a', 'a', 't', 't', 'c', 'b', 'a', 'i', '.', 'o'}; 

    private static final int[][] SWAPS = new int[][] { 
     {2, 8, 18, 4, 0, 15, 1, 11, 3, 14, 20, 5, 19, 16, 13, 6, 12, 10, 17, 9, 7}, 
     {15, 8, 6, 2, 17, 14, 4, 9, 0, 5, 13, 7, 3, 19, 10, 18, 20, 11, 16, 12, 1}, 
     {0, 17, 20, 7, 6, 3, 14, 2, 18, 15, 19, 8, 16, 1, 5, 9, 13, 12, 11, 4, 10}, 
     {12, 11, 15, 14, 10, 4, 0, 19, 13, 17, 3, 9, 20, 6, 8, 16, 1, 7, 5, 18, 2} 
    }; 

    public static void main(String[] args) { 
     char[] str = MP; 
     int[][] out ; 
     Teste p = new Teste() ; 

     while (p.SWAPS != null) { 
      out = p.SWAPS; 

      for (char e : MP) { 
       System.out.print(e + " - ") ; 
      } 
      System.out.println() ; 
     } 
    } 
} 
+1

何が返ってきますか、それに正確に何を返すのですか? –

+1

ここでは置換はどこですか?あなたは無限に 'MP'配列を出力しています... –

+0

(私はポルトガル語ではあるが)同じ質問[ここではより良い説明](http://pt.stackoverflow.com/q/157236)を見つけた。基本的に、SWAPSの各インデックスは、SWAPSの次の行のインデックスであり、MP内の各文字の位置を検索します。例えば、最初の文字( 'i')については、SWAPS [0] [0] - > 2、次いでSWAPS [1] [2] - > 6、SWAPS [2] [6] SWAPS [3] [14] = 8.したがって、最終的な結果では、文字( 'i')は8桁になります。 MPの各キャラクターに同じパターンを従えば、あなたは電子メールアドレスを取得します。 – mellamokb

答えて

1

あなたのコードはまったくスワップ配列を使用していないようです。

何かの方法でSWAPSアレイを使用して、印刷するMPのインデックスを決めることを意味しますか?

また、p.SWAPSの値をチェックするwhileループがあります。ただし、この値はループ内で変更されることはありませんので、無限ループが発生します。

MP配列からランダムな文字を選択する場合は、java.util.Randomクラスを使用できます。

上記の説明では、MP配列の最初の文字の位置(8)の検索方法を指定しています。 MP配列内の残りの文字の位置はどうやって見つけますか?毎回0,0から始めると、すべての文字が8番目のインデックスになります。

+0

'Random'はバランスのとれた確率をもたらすかもしれないので注意して使用する必要があります。 –

+0

それは問題です、私はそれを望んでいません、私は0, – Kirat

+0

から抜け出したい、これは私に電子メールを与えるが、私はそれを行う方法を知らない – Kirat

関連する問題