【问题标题】:Using a foreach loop to add values from an arraylist, and then print them using accessors使用 foreach 循环从 arraylist 添加值,然后使用访问器打印它们
【发布时间】:2013-02-09 12:49:30
【问题描述】:

以前的问题: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 的一部分,它有一个构造函数和三个访问器方法来访问状态对象中的每个参数。由哪个 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”。

【问题讨论】:

  • 你在哪里设置状态值,我的意思是你在任何地方设置这些值?
  • 对不起,忘了包括那个。 stateVotes 的每个状态对象都是从 txt 文件中读取的一行。这是我链接的旧问题并且工作正常。也为其他人更新。

标签: java if-statement printing arraylist foreach


【解决方案1】:

糟糕,显然我需要调用 assignStates();在构造函数中。有人告诉我早些时候删除它,但是我调用它的方式需要将它放在构造函数中,所以当我创建 ElectoralCollege 对象并使用它来调用announceWinner() 它将拥有它,或者我需要在我的主要内容之前单独调用它。

感谢您的帮助:)。

【讨论】:

    【解决方案2】:

    如果Party.DEMOCRAT返回一个字符串那么你需要使用

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

    不是

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

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

    【讨论】:

    • 啊,完全忘记了那个xD。但是,当我这样做时,所有 int 值(dem、rep、ind)始终为 0。编辑以反映这一点。而且我仍然不打印我的第二个 foreach 循环的结果
    • 我认为如果最后一个 foreach 没有运行,那么您的输入就有问题。 (或者你如何解析它)
    • 更新了数据示例
    猜你喜欢
    • 2012-04-06
    • 2022-01-03
    • 2014-06-22
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2019-05-02
    • 1970-01-01
    相关资源
    最近更新 更多