前一个问题:将概率分配给随机枚举对象
所以我有这个:
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”。