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 を調べて、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」です。

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 に答える