为什么跳过for循环中的布尔值?

时间:2017-02-27 01:17:03

标签: java for-loop while-loop

所以我正在计算输入文件中的投票,sample.txt:

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票。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

readInt()将在每次调用的输入中读取一个新的整数。所以这就是你的循环所做的事情:

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

首先,i为0.程序读取整数并查看它是否为0。

假设整数不是0.现在你的for循环回来了,并用i = 1再次执行这个语句。你的if语句现在从另一个整数读取输入。它没有使用之前读过的相同整数。你告诉它读一个整数,所以它读一个。

我认为你可以看到这不是你想做的事。您的readInt()必须在for循环之外。我认为,一旦你做出这个改变,你就会发现你根本不需要for循环。