0

前一个问题:将概率分配给随机枚举对象

所以我有这个:

import java.util.List;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Random;
import java.util.ArrayList;
import java.util.Scanner;
import java.lang.Integer;

public class ElectoralCollege {
    public static final String FILE = "Electoral201X.txt";
    private ArrayList <State> stateVotes;

    Random rand = new Random();
    List<Party> parties = Arrays.asList(Party.DEMOCRAT, Party.DEMOCRAT, Party.REPUBLICAN, Party.REPUBLICAN, Party.INDEPENDENT);

    public ElectoralCollege() throws IOException    {

        stateVotes = new ArrayList<State>();
    }

    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 numVote = stateData.substring(stateEnd + 2);

            Party winner = parties.get(rand.nextInt(5));

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

    }

    public void announceWinner()    {

        int dem = 0;
        int rep = 0;
        int ind = 0 ;

        for(State a : stateVotes)   {

            if(a.getWinner().equals(Party.DEMOCRAT))
                dem = dem + a.getNumVotes();
            else if(a.getWinner().equals(Party.REPUBLICAN))
                rep = rep + a.getNumVotes();
            else if(a.getWinner().equals(Party.INDEPENDENT))
                ind = ind + a.getNumVotes();

        }
            if(dem >= 270)
                System.out.println("DEMOCRATS WIN");
            else if(rep >= 270)
                System.out.println("REPUBLICANS WIN");
            else if(ind >= 270)
                System.out.println("INDEPENDENTS WIN");
            else
                System.out.println("CONGRESS MUST CHOOSE");


        for(State b : stateVotes)
            System.out.println(b.getName() + " " + b.getWinner());  
    }


}

我需要回答这个问题:

在announceWinner() 中查看stateVotes 并将三个政党的总选举人票相加。打印出每个政党的总选举人票,如果任何政党的票数超过获胜所需的 270 张,则宣布该政党为获胜者 - 否则宣布国会将不得不做出选择。最后,打印每个州的个人获胜者。

出于某种原因,它总是打印 CONGRESS MUST CHOOSE。 经过进一步调查,dem、ind 和 rep 的所有 int 值始终为 0。 不确定我是否需要像我一样初始化变量,但是当我不需要时它一直给我错误。

Accessor 方法都是基本 State.class 的一部分,它有一个构造函数和三个访问器方法来访问状态对象中的每个参数。stateVotes 由哪个 stateVotes 组成。

stateVotes 中的状态值也已全部设置。从旧问题中,我从文件中读取了一行文本,将其制成状态对象,然后将其放入 stateVotes 数组列表中。我为该文件中的每一行文本都这样做了。

第二个 foreach 循环根本不打印任何内容。

状态类很简单:

public class State {

    private String Name;
    private int votes;
    private Party winningParty;

    public State(String stateName, int numVote, Party winner)   {

        Name = stateName;
        votes = numVote;
        winningParty = winner;

    }

    public Party getWinner()    {

        return winningParty;    
    }

    public String getName()     {

        return Name;
    }

    public int getNumVotes()    {

        return votes;

    }


}

州数据的示例是“Floria 29 DEMOCRAT”。

4

2 回答 2

0

如果Party.DEMOCRAT返回一个字符串,那么你需要使用

if(a.getWinner().equals(Party.DEMOCRAT))

不是

if(a.getWinner() == Party.DEMOCRAT)

这背后的基本原理是因为您正在比较字符串而不是值。字符串不能与 == 进行比较,您必须使用 .compair 或 .equals 来限定内容。

于 2013-02-24T05:39:57.743 回答
0

糟糕,显然我需要调用 assignStates(); 在构造函数中。有人告诉我早些时候删除它,但是我调用它的方式需要将它放在构造函数中,所以当我创建 ElectoralCollege 对象并使用它来调用announceWinner() 它将拥有它,或者我需要在我的主要内容之前单独调用它。

谢谢你的帮助 :)。

于 2013-02-24T22:08:44.673 回答