2017-02-26 75 views
-1

我想嘗試從數組中創建唯一名稱。從數組中創建唯一的名稱而不重複

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

在這裏,我創建一個字符串(Helper.random只是選擇一個隨機元素的方法)。我想避免像「Benben」或「Pepe」這樣的名字...

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」這樣的重複。

如何創建唯一的名稱,如:

創建一個字符串名稱此數組中的所有組合(「盒飯」,Benpe」,‘盒飯’.....)
如果您GET重複(「盒飯」便當「)添加其他元素的名稱(」 Bentope「)

+0

你怎麼跟你在創建後的名字嗎?你是立即使用它們還是以某種方式存儲它們? –

+0

你可以迭代你的列表來檢查是否有重複值? –

回答

1

一個快速的解決方案是將if變成一個循環。如果連續多次獲得相同名稱,則需要繼續嘗試。

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

注意,無論是if也不while思想的規範相匹配。你應該添加第三個項目的名稱,而不是替換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"); 
          } 
        } 
      } 

`