Метод доступа ArrayList не возвращает значений

Это моя первая программа, которую я делаю из своего класса. Он предназначен для проведения однопереносных выборов; сейчас мне нужно получить 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 ответа

Решение

Вы создаете новую переменную ArrayList в своем конструкторе, вместо этого вы должны сделатьthis.candidates = new ArrayList<Candidate>();

Кроме того, плохо иметь всю логику в конструкторе, вместо этого вы должны сделать addCandidates() метод

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>();

В этой строке:

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

Вы определяете локальную переменную, которая скрывает члена класса. Брось эту строку.

Другие вопросы по тегам