Java 为什么我的程序只打印数组的最后一个对象值?

Java 为什么我的程序只打印数组的最后一个对象值?,java,arrays,traversal,Java,Arrays,Traversal,候选人类别: public class Candidate { private static String name; private static int numVotes; Candidate(String name, int numVotes) { Candidate.name = name; Candidate.numVotes = numVotes; } public String toString(

候选人类别:

public class Candidate 
{
    private static String name;
    private static int numVotes;

    Candidate(String name, int numVotes)
    {
        Candidate.name = name;
        Candidate.numVotes = numVotes;
    }

    public String toString()
    {
        return name + " recieved " + numVotes + " votes.";
    }

    public static int getVotes()
    {
         return numVotes;
    }

    public static void setVotes(int inputVotes)
    {
         numVotes = inputVotes;
    }

    public static String getName()
    {
        return name;
    }

    public static void setName(String inputName)
    {
        name = inputName;
    }
}
测试候选类:

public class TestCandidate 
{
    public static Candidate[] election = new Candidate[5];

    public static void addCandidates(Candidate[] election)
    {
        election[0] = new Candidate("John Smith", 5000);
        election[1] = new Candidate("Mary Miller", 4000);
        election[2] = new Candidate("Michael Duffy", 6000);
        election[3] = new Candidate("Tim Robinson", 2500);
        election[4] = new Candidate("Joe Ashton", 1800);
    }


    public static int getTotal(Candidate[] election)
    {
        int total = 0;

        for (Candidate i : election)
        {
            total += Candidate.getVotes();
        }

        return total;
    }

    public static void printResults(Candidate[] election)
    {
        System.out.printf("%s%12s%25s", "Candidate", "Votes", "Percentage of Votes\n");

        for (Candidate i: election)
        {
            System.out.printf("\n%s%10s%10s", Candidate.getName(), Candidate.getVotes(), ((double)Candidate.getVotes()/getTotal(election) * 100));
        }

        System.out.println("\n\nTotal Number of Votes: " + getTotal(election));
    } 

    public static void main (String args[])
    {
        addCandidates(election);
        printResults(election);
    }
}
每当我运行TestCandidate类时,它都会输出以下内容:

Candidate       Votes     Percentage of Votes

Joe Ashton      1800      20.0
Joe Ashton      1800      20.0
Joe Ashton      1800      20.0
Joe Ashton      1800      20.0
Joe Ashton      1800      20.0

Total Number of Votes: 9000
该计划的重点是输出所有候选人,并根据每个人计算平均数。我相信这是我的for-each循环中的一个问题。在此方面的任何帮助都将不胜感激

private static String name;
private static int numVotes;
静态成员对于类的所有实例都有一个值。删除static关键字以使不同的实例具有不同的值。

如果执行此操作:

private static String name;
private static int numVotes;
您创建的每个新候选对象都将覆盖所有其他对象的字段名称和numVotes,因为这些字段不是对象字段是类字段

您需要删除这些字段的static关键字才能工作:

例子:
可能是因为候选类中的私有变量是静态的,这意味着您希望在所有实例中共享变量。如果在构造函数中设置“static”字段,几乎可以肯定这是一个bug。
public class Candidate 
{
    private String name;
    private int numVotes;

    Candidate(String name, int numVotes)
    {
        Candidate.name = name;
        Candidate.numVotes = numVotes;
    }
    .... .... ETC ETC