2017-02-27 103 views
-1

從輸入文件所以我計票,爲sample.txt:爲什麼我的布爾值在for循環中被跳過?

3 
Homer REP 
Moe IND 
Barney DEM 
0 1 0 2 2 0 

我的代碼如下所示:

public static void main(String[] args) { 
    int numCans = StdIn.readInt();//Number of candidates 
    String[] cans = new String[numCans];//Array containing the candidates 
    String[] parts = new String[numCans];//Array that contains the parties. 
    int[] votes = new int[numCans]; 
    int voteCount = 0; 
    for (int i = 0; i < numCans; i++){ 
     cans[i] = StdIn.readString(); 
     parts[i] = StdIn.readString(); 
    } 
    while (!StdIn.isEmpty()){//for counting votes 
     for(int i = 0; i < votes.length; i++){ 
      if(StdIn.readInt() == i){ 
       votes[i]++; 
       StdOut.println(i); 
      } 
     } 
     voteCount++; 
     } 
} 

那麼最終發生的是它計算約2票。謝謝你的幫助!

+2

預期產量是多少?你真正的問題是什麼?你有沒有試過調試你的代碼? – luk2302

+0

您的代碼在for循環中讀取3次。所以2是你應該得到的,雖然它不是你所期望的。您的代碼應該在for循環之前調用StdIn.readInt()(並將返回的值賦給變量)。 – Shiping

回答

1

readInt()將從輸入中讀取一個新的整數,每調用時間。因此,這裏是你的循環做什麼:

 if(StdIn.readInt() == i){ 
      votes[i]++; 
      StdOut.println(i); 
     } 

首先,i是0,程序讀取整數,並認爲,如果是0

假設整數不爲0,現在你for環環回,並用i = 1再次執行此語句。您的if語句現在從輸入中讀取另一個整數。它不使用它讀取的相同整數。你讓它讀取一個整數,所以它讀取一個整數。

我想你可以看到這不是你想要做的。您的readInt()必須在for循環之外。我認爲,一旦你做了這個改變,你會發現你根本不需要for循環。

+0

是的。 for循環是不需要的。什麼是閱讀是vode。 – Shiping

+0

非常感謝!我非常感謝幫助!我做了一個修改,對我來說有意義,在for循環之外有一個新變量,這樣我就不會每次都讀一個新的整數。對於那些瀏覽google的人,新代碼如下所示: '\t \t while(!StdIn.isEmpty()){//用於計票 \t \t int vote = StdIn.readInt(); \t \t \t對(INT I = 0; I Gorum