だから私はこれを持っています:
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 を調べて、3 つの政党それぞれの総選挙人票を合計します。各政党の総選挙人票を出力し、勝利に必要な 270 票を超える政党があれば、その政党を勝者として発表します。最後に、各州の個々の勝者を出力します。
何らかの理由で、常に CONGRESS MUST CHOOSE が出力されます。 さらに調査すると、dem、ind、rep のすべての int 値は常に 0 です。変数を初期化する必要があるかどうかはわかりませんが、そうしないとエラーが発生し続けました。
アクセサー メソッドはすべて基本的な State.class の一部であり、コンストラクターと、状態オブジェクトのすべてのパラメーターにアクセスするための 3 つのアクセサー メソッドがあります。stateVotes が構成されている州。
stateVotes の状態値もすべて設定されます。古い質問から、ファイルからテキスト行を読み取り、それを状態オブジェクトにしてから、stateVotes 配列リストに入れました。そのファイルのテキストの各行に対してこれを行いました。
2 番目の foreach ループでは、何も出力されません。
State クラスは非常に単純です。
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;
}
}
State データの例は「Floria 29 DEMOCRAT」です。