Java中随机数拾取时如何停止重复 public void start()引发TwitterException,IOException { setOAuthConsumer(CONSUMER\u KEY,CONSUMER\u KEY\u SECRET); AccessToken oathAccessToken=新的AccessToken(访问密钥、访问密钥、密码); setOAuthAccessToken(oathAccessToken); ColorBlender MyColorBlender=新的ColorBlender(); updateStatus(TwitterActions.getCatchphrase()); } 公共静态字符串getCatchPhase()引发FileNotFoundException { ColorBlender MyColorBlender=新的ColorBlender(); 字符串newcolor=myclourbander.blendclour(); 字符串[]短语数组={“短语1”、“短语2”、“短语3”}; 随机r=新随机(); String catchphrase=phraseArray[r.nextInt(phraseArray.length)]; 回归口号; }

Java中随机数拾取时如何停止重复 public void start()引发TwitterException,IOException { setOAuthConsumer(CONSUMER\u KEY,CONSUMER\u KEY\u SECRET); AccessToken oathAccessToken=新的AccessToken(访问密钥、访问密钥、密码); setOAuthAccessToken(oathAccessToken); ColorBlender MyColorBlender=新的ColorBlender(); updateStatus(TwitterActions.getCatchphrase()); } 公共静态字符串getCatchPhase()引发FileNotFoundException { ColorBlender MyColorBlender=新的ColorBlender(); 字符串newcolor=myclourbander.blendclour(); 字符串[]短语数组={“短语1”、“短语2”、“短语3”}; 随机r=新随机(); String catchphrase=phraseArray[r.nextInt(phraseArray.length)]; 回归口号; },java,random,no-duplicates,Java,Random,No Duplicates,在这段代码中,我希望在一个数组中包含许多流行语,这些流行语将在twitter上随机发布,但我不希望它们被重复 如何停止r生成重复项?您可以洗牌短语数组。所以元素的顺序是随机的 Arrays.shuffle(phraseArray); 您可以随意移动短语数组。所以元素的顺序是随机的 Arrays.shuffle(phraseArray); 实现它的最简单方法是创建一个可能的数字列表(例如1到100),然后您可以使用Collections.shuffle 或者,您可以使用LinkedHashSe

在这段代码中,我希望在一个数组中包含许多流行语,这些流行语将在twitter上随机发布,但我不希望它们被重复


如何停止r生成重复项?

您可以洗牌短语数组。所以元素的顺序是随机的

Arrays.shuffle(phraseArray);

您可以随意移动短语数组。所以元素的顺序是随机的

Arrays.shuffle(phraseArray);

实现它的最简单方法是创建一个可能的数字列表(例如1到100),然后您可以使用
Collections.shuffle

或者,您可以使用
LinkedHashSet
跟踪生成的数字

Random r = new Random(); 
Set<Integer> g = new LinkedHashSet<Integer>();
while (g.size() < numbersRequired)
{
    Integer n = r.nextInt(max) + 1;
    // Here it will automatically do a containment check
    g.add(n);
}
Random r=new Random();
Set g=新LinkedHashSet();
while(g.size()

LinkedHashSet将帮助您跟踪所创建的数字的插入顺序。

实现这一点的最简单方法是创建一个可能的数字列表(例如1到100),然后您可以使用
集合对其进行无序排列。无序排列

或者,您可以使用
LinkedHashSet
跟踪生成的数字

Random r = new Random(); 
Set<Integer> g = new LinkedHashSet<Integer>();
while (g.size() < numbersRequired)
{
    Integer n = r.nextInt(max) + 1;
    // Here it will automatically do a containment check
    g.add(n);
}
Random r=new Random();
Set g=新LinkedHashSet();
while(g.size()

LinkedHashSet将帮助您跟踪创建的数字的插入顺序。

使用
java.util.Random.nextInt()
无法保证不重复。但是,如果要生成的随机数相对较少,可以将它们添加到集合中,然后执行
集合.shuffle()

使用
java.util.random.nextInt()
无法保证不重复。但是,如果要生成的随机数相对较少,可以将它们添加到集合中,然后执行
Collections.shuffle()

添加一个短语管理器,将使用过的元素从短语列表中删除N次迭代(或某些其他机制,例如不允许重复),怎么样。代码如下所示:

public class Class {
    static class PhraseManager {
        public final int N = 1;
        private Random r = new Random();

        private final LinkedList<String> phrases = new LinkedList<String>();
        private final LinkedList<String> phrasesUsedLastNTimes = new LinkedList<String>();

        public PhraseManager(Collection<String> phrases) {
            this.phrases.addAll(phrases);
        }

        public String getRandomPhrase() {

            String catchphrase = phrases.remove(r.nextInt(phrases.size()));
            phrasesUsedLastNTimes.addFirst(catchphrase);
            if(phrasesUsedLastNTimes.size() > N) {
                phrases.addLast(phrasesUsedLastNTimes.pollLast());
            }
            return catchphrase;
        }


    }

    private static PhraseManager phraseManager = new PhraseManager(Arrays.asList(new String[] {"Phrase1", "Phrase2", "Phrase3"}));

    public void start() throws TwitterException, IOException {

        twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_KEY_SECRET);
        AccessToken oathAccessToken = new AccessToken(ACCESS_KEY,
                ACCESS_KEY_SECRET);
        twitter.setOAuthAccessToken(oathAccessToken);
        ColourBlender myColourBlender = new ColourBlender();
        twitter.updateStatus(TwitterActions.getCatchphrase());
    }

    public static String getCatchphrase() throws FileNotFoundException
    {
        ColourBlender myColourBlender = new ColourBlender();
        String newColour = myColourBlender.BlendColour();


        return phraseManager.getRandomPhrase();
    }
} 
公共类{
静态类短语管理器{
公共最终int N=1;
私有随机r=新随机();
private final LinkedList短语=新建LinkedList();
private final LinkedList短语susedLastntimes=new LinkedList();
公共短语管理器(收集短语){
this.phrases.addAll(短语);
}
公共字符串getRandomPhase(){
字符串catchphrase=phrases.remove(r.nextInt(phrases.size());
使用最新短语。添加第一个(流行语);
if(短语susedLastntimes.size()>N){
短语.addLast(短语susedLastTimes.pollLast());
}
回归口号;
}
}
private static PhraseManager PhraseManager=newphrasemanager(Arrays.asList(新字符串[]{“Phrase1”、“Phrase2”、“Phrase3”}));
public void start()引发TwitterException,IOException{
setOAuthConsumer(CONSUMER\u KEY,CONSUMER\u KEY\u SECRET);
AccessToken oathAccessToken=新的AccessToken(访问密钥,
访问(密钥和秘密);
setOAuthAccessToken(oathAccessToken);
ColorBlender MyColorBlender=新的ColorBlender();
updateStatus(TwitterActions.getCatchphrase());
}
公共静态字符串getCatchPhase()引发FileNotFoundException
{
ColorBlender MyColorBlender=新的ColorBlender();
字符串newcolor=myclourbander.blendclour();
返回phraseManager.getrandomPhase();
}
} 

如何添加一个短语管理器,在N次迭代中从短语列表中删除已使用的元素(或某些其他机制,如不允许重复)。代码如下所示:

public class Class {
    static class PhraseManager {
        public final int N = 1;
        private Random r = new Random();

        private final LinkedList<String> phrases = new LinkedList<String>();
        private final LinkedList<String> phrasesUsedLastNTimes = new LinkedList<String>();

        public PhraseManager(Collection<String> phrases) {
            this.phrases.addAll(phrases);
        }

        public String getRandomPhrase() {

            String catchphrase = phrases.remove(r.nextInt(phrases.size()));
            phrasesUsedLastNTimes.addFirst(catchphrase);
            if(phrasesUsedLastNTimes.size() > N) {
                phrases.addLast(phrasesUsedLastNTimes.pollLast());
            }
            return catchphrase;
        }


    }

    private static PhraseManager phraseManager = new PhraseManager(Arrays.asList(new String[] {"Phrase1", "Phrase2", "Phrase3"}));

    public void start() throws TwitterException, IOException {

        twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_KEY_SECRET);
        AccessToken oathAccessToken = new AccessToken(ACCESS_KEY,
                ACCESS_KEY_SECRET);
        twitter.setOAuthAccessToken(oathAccessToken);
        ColourBlender myColourBlender = new ColourBlender();
        twitter.updateStatus(TwitterActions.getCatchphrase());
    }

    public static String getCatchphrase() throws FileNotFoundException
    {
        ColourBlender myColourBlender = new ColourBlender();
        String newColour = myColourBlender.BlendColour();


        return phraseManager.getRandomPhrase();
    }
} 
公共类{
静态类短语管理器{
公共最终int N=1;
私有随机r=新随机();
private final LinkedList短语=新建LinkedList();
private final LinkedList短语susedLastntimes=new LinkedList();
公共短语管理器(收集短语){
this.phrases.addAll(短语);
}
公共字符串getRandomPhase(){
字符串catchphrase=phrases.remove(r.nextInt(phrases.size());
使用最新短语。添加第一个(流行语);
if(短语susedLastntimes.size()>N){
短语.addLast(短语susedLastTimes.pollLast());
}
回归口号;
}
}
private static PhraseManager PhraseManager=newphrasemanager(Arrays.asList(新字符串[]{“Phrase1”、“Phrase2”、“Phrase3”}));
public void start()引发TwitterException,IOException{
setOAuthConsumer(CONSUMER\u KEY,CONSUMER\u KEY\u SECRET);
AccessToken oathAccessToken=新的AccessToken(访问密钥,
访问(密钥和秘密);
setOAuthAccessToken(oathAccessToken);
配色机myclourbander=新配色机