前问题:Assigning probability to a random enum object
所以我有这个:
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的一部分,它有一个构造函数和三个访问器方法来访问state对象中的每个参数。哪个stateVotes由。
组成stateVotes中的状态值也都已设置。从旧问题我读取文件中的一行文本,使其成为状态对象,然后将其放入stateVotes arraylist。我对该文件中的每一行文本都这样做了。
第二个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”。
答案 0 :(得分:0)
如果Party.DEMOCRAT
返回字符串,则需要使用
if(a.getWinner().equals(Party.DEMOCRAT))
不是
if(a.getWinner() == Party.DEMOCRAT)
这背后的基本原理是因为您正在比较字符串而不是值。字符串无法与==进行比较。您必须使用.compair或.equals来限定内容。
答案 1 :(得分:0)
哎呀,显然我需要调用assignStates();在构造函数中。我被告知要先删除它,但是我调用它的方式我需要将它放在构造函数中,所以当我创建ElectoralCollege对象并使用它来调用announceWinner()它会有它,或者我需要在我的主要内容之前单独调用它。
感谢您的帮助:)。