ArrayList 访问器方法 returns 没有值

ArrayList accessor method returns no values

这是我自己制作的第一个程序class。它旨在执行单一可转让选举;现在我需要获取 ArrayList<Candidate>Candidate 个对象。在构造函数内部,这个过程工作得很好;但是,一旦我尝试使用访问器方法,就会返回一个空的 ArrayList 。这是代码:

import java.util.*;
public class Election {

    public ArrayList<Candidate> candidates = new ArrayList<Candidate>();

    Election(int numVotes) {
        String name;
        ArrayList<Candidate> candidates = new ArrayList<Candidate>();
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter the candidates you want in the election.");
        System.out.println("Enter -1 once you have listed all the candidates.");
        System.out.print("Start entering candidates: ");
        name = keyboard.nextLine();
        while (!name.equals("-1")) {
            candidates.add(new Candidate(name));
            System.out.print("Ok, enter a new candidate or -1: ");
            name = keyboard.nextLine();

        }

        //Works fine here
    }

    public ArrayList<Candidate> getCandidateList() {   
        //Keeps returning empty list
        //System.out.println(candidates);
        return this.candidates;    
    }
} 
public ArrayList<Candidate> candidates = new ArrayList<Candidate>();
Election(int numVotes)
{
    String name;
    ArrayList<Candidate> candidates = new ArrayList<Candidate>();
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

您正在创建一个 不同的 arraylist 和 "shadowing" candidates 成员变量。应该是

    this.candidates = new ArrayList<Candidate>();

这一行:

ArrayList<Candidate> candidates = new ArrayList<Candidate>();

您定义了一个隐藏 class 成员的局部变量。删除该行。

您正在构造函数中创建一个新的 ArrayList 变量,您应该这样做 this.candidates = new ArrayList<Candidate>();

此外,将所有逻辑都放在构造函数中是不好的做法,您应该创建一个 addCandidates() 方法