使用foreach循环从arraylist添加值,然后使用访问器打印它们

时间:2013-02-24 05:26:51

标签: java if-statement printing arraylist foreach

前问题: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”。

2 个答案:

答案 0 :(得分:0)

如果Party.DEMOCRAT返回字符串,则需要使用

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

不是

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

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

答案 1 :(得分:0)

哎呀,显然我需要调用assignStates();在构造函数中。我被告知要先删除它,但是我调用它的方式我需要将它放在构造函数中,所以当我创建ElectoralCollege对象并使用它来调用announceWinner()它会有它,或者我需要在我的主要内容之前单独调用它。

感谢您的帮助:)。