首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将概率分配给随机枚举对象

将概率分配给随机枚举对象
EN

Stack Overflow用户
提问于 2013-02-24 11:42:31
回答 1查看 756关注 0票数 1

所以我这里有一个枚举:

代码语言:javascript
复制
public enum Party {

    DEMOCRAT, INDEPENDENT, REPUBLICAN
}

我现在有三个类中的一个:

代码语言:javascript
复制
public class ElectoralCollege {
    public static final String FILE = "Electoral201X.txt";
    private ArrayList <State> stateVotes;
    Random rand = new Random();

    public ElectoralCollege() throws IOException    {

        stateVotes = new ArrayList<State>();
        assignStates();
    }

    public void assignStates() throws IOException   {

        File f = new File(FILE);
        Scanner fReader = new Scanner(f);

        while(fReader.hasNext())    {

            String stateData = fReader.nextLine();
            int stateEnd = stateData.indexOf(" - ");
            String stateName = stateData.substring(0, stateEnd);
            String stateVotes = stateData.substring(stateEnd + 2);
            //System.out.println(stateName + " " + stateVotes);


        }

在这里,我从一个文件中读取,其中包含各州的名称和他们的选举人票数量,如下所示“佛罗里达- 29",所以所有的问题都解决了。

我下一步要做的是使用一个随机对象从我的party枚举中为它们分配一个参与方。共和党和民主党必须有2/5的机会winning...while独立必须有1/5的机会。然后,我必须创建一个State对象(它以州名称、得票数和所在政党作为参数),并将其放入该数组列表中。最有可能的是使用for each循环,只需要对此做一些更多的研究。

我的问题是,对于这三方,我如何以设定的概率使用这个随机对象rand,并执行它?有人有什么想法吗?

编辑:底线是:我如何为这三个参与方实现2/5和1/5的概率,然后调用随机对象以基于这些概率给我一个参与方?

在mre回答之后,我这样做了:

代码语言:javascript
复制
Random rand = new Random();
    List<Party> parties = Arrays.asList(Party.DEMOCRAT, Party.DEMOCRAT, Party.REPUBLICAN, Party.REPUBLICAN, Party.INDEPENDENT);

稍晚一点……

公共空assignStates()抛出IOException {

代码语言:javascript
复制
File f = new File(FILE);
Scanner fReader = new Scanner(f);

while(fReader.hasNext())    {

    String stateData = fReader.nextLine();
    int stateEnd = stateData.indexOf(" - ");
    String stateName = stateData.substring(0, stateEnd);
    String numVote = stateData.substring(stateEnd + 2);

    Party winner = parties.get(rand.nextInt(5));
    //System.out.println(stateName + " " + numVote + " " + winner);

    State voteInfo = new State(stateName, Integer.parseInt(numVote.trim()), winner);
    stateVotes.add(voteInfo);

}

}

回答,新问题:Using a foreach loop to add values from an arraylist, and then print them using accessors

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-24 12:03:54

具有5个Party实例的集合,其中2个是DEMOCRAT,2个是REPUBLICAN,1个是INDEPENDENT,然后使用随机数生成器来生成用于访问的随机索引(即0-4),例如,

代码语言:javascript
复制
import java.util.Arrays;
import java.util.List;
import java.util.Random;

public class Demo 
{
    public static void main(String[] args) 
    {
       Random r = new Random();
       List<Party> parties = Arrays.asList(Party.DEMOCRAT, Party.DEMOCRAT, Party.REPUBLICAN, Party.REPUBLICAN, Party.INDEPENDENT);

       System.out.println(parties.get(r.nextInt(parties.size())));
    }

    enum Party
    {
        DEMOCRAT,
        REPUBLICAN,
        INDEPENDENT;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15048404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档