2013-02-24 24 views
0

前一個問題打印出來:Assigning probability to a random enum object使用foreach循環,從一個ArrayList中添加值,然後利用存取

所以我有這樣的:

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必須選擇。經進一步調查所有詮釋DEM,IND和代表的值始終爲0。不知道我是否需要初始化變量或不喜歡我這樣做,但它一直給我的錯誤,當我沒有。

存取方法是一個基本的State.class,有一個構造函數和三個存取方法來訪問每個參數的狀態對象的一部分。哪些stateVotes組成。

在stateVotes狀態值也全部搞定。從舊的問題中,我從文件中讀取一行文本,將其寫入一個狀態對象,然後將其放入stateVotes數組列表中。我爲該文件中的每行文本執行了此操作。

第二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; 

    } 


} 

的狀態數據的示例是 「弗洛里亞29的民主主義」。

+0

在哪裏設置狀態值,我的意思是你在哪裏設置這些值? – 2013-02-24 05:32:36

+0

抱歉忘記了包括那個。 stateVotes的每個狀態對象都是從txt文件中讀取的一行。這是我連接並且工作正常的老問題。更新爲其他人。 – Stax 2013-02-24 05:36:10

回答

0

如果Party.DEMOCRAT返回一個字符串,那麼你需要使用

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

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

這樣做的理由是因爲你比較字符串不值。字符串不能與==相比較,您必須使用.compair或.equals來限定內容。

+0

啊,完全忘了那個xD。 但是,當我這樣做時,所有int值(dem,rep,ind)總是爲0.編輯以反映這一點。我仍然不打印我的第二個foreach循環的結果 – Stax 2013-02-24 05:42:40

+0

需要發佈剩餘的代碼。我無法調試,否則 – 2013-02-24 05:47:45

+0

發佈類:) – Stax 2013-02-24 05:50:48

0

糟糕,顯然我需要調用assignStates();在構造函數中。我被告知早些時候刪除它,但是我調用它的方式我需要將它放在構造函數中,所以當我創建ElectoralCollege對象並使用它來調用announceWinner()時,它會擁有它,或者我需要在我的主要任何東西之前單獨調用它。

感謝您的幫助:)。