2017-02-26 2 views
-1

配列から一意の名前を作成しようとします。重複なしで配列から一意の名前を作成

public String[] firstname = {"Ben", "Pe", "To", "Jau",...}; 

ここで私はString(Helper.randomはランダムな要素を選択する単なる方法です)を作成します。私は今、私はこだわっています

String name1 = firstname[Helper.random(0, firstname.length)]; 
String name2 = firstname[Helper.random(0, firstname.length)]; 

if(name1.equals(name2)) { 
    name1 = firstname[Helper.random(0, firstname.length)]; 
} 

...「ベンベン」または「ペペ」のような名前は避けたいです。私はいくつかの名前をつくりますが、ここでは "Benpe"や "Benpe"のような重複があります。

は、どのように私は次のように、一意の名前を作成することができます。

はALLの組み合わせで、この配列から文字列名を作成します( "弁当"、Benpe」、 "弁当" .....)
YOU IF DUPLICATE(「弁当」、弁当「)をGET名に別の要素を追加します(」Bentope」)

+0

あなたがそれらを作成した後、名前と何をしますか?すぐに使用しているのですか、何らかの方法で保管していますか? –

+0

重複した値があるかどうかチェックするためにリストを反復できますか? –

答えて

1

一つの迅速な解決がループにifを変更することです。同じ名前が連続して複数回出現する場合に備えて、引き続き試してみる必要があります。

while (name1.equals(name2)) { 
    name1 = firstname[Helper.random(0, firstname.length)]; 
} 

ifwhileアイデアでもないが仕様と一致していることに注意してください。名前に3番目の項目を追加し、name1を置き換えないとします。

0

現在生成されている名前のハッシュをチェックする句を追加します。存在する場合は、既存の文字列に別の名前を追加する必要があることがわかります。もう一度チェック...洗って、すすぎ、繰り返してください。

例: `

  String[] names = {"Mike", "Bill", "Jerry", "Frank", "Poul", "Terry"}; 
      HashMap<String, Integer> nameMap = new HashMap<String, Integer>(); 
      Random rand = new Random(); 

      for (int i=0; i<10; i++) { 
        String myFirstName = names[rand.nextInt(names.length)]; 
        String mySecondName = names[rand.nextInt(names.length)]; 

        String concatName = myFirstName + " " + mySecondName; 
        if (! nameMap.containsKey(concatName)) { 
          nameMap.put(concatName, 1); 
        } else { 
          // try adding a third name 
          String myThirdName = names[rand.nextInt(names.length)]; 
          String newName = concatName + " " + myThirdName; 

          if (! nameMap.containsKey(newName)) { 
            nameMap.put(newName, 1); 
          } else { 
            System.out.println(newName + " already exists in the name map"); 
          } 
        } 
      } 

`