ArrayList访问器方法不返回值

时间:2018-05-28 19:29:23

标签: java arraylist accessor

这是我自己上课的第一个程序。它旨在进行单一转让选举;现在我需要获得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;    
    }
} 

3 个答案:

答案 0 :(得分:2)

public ArrayList<Candidate> candidates = new ArrayList<Candidate>();
Election(int numVotes)
{
    String name;
    ArrayList<Candidate> candidates = new ArrayList<Candidate>();
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

您正在创建不同的 arraylist并“隐藏”candidates成员变量。它应该是

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

答案 1 :(得分:0)

在这一行:

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

定义一个隐藏类成员的局部变量。放弃那条线。

答案 2 :(得分:0)

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

另外,在构造函数中包含所有逻辑是不好的做法,您应该使用addCandidates()方法