Метод доступа ArrayList не возвращает значений - PullRequest
0 голосов
/ 28 мая 2018

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

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

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

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

0 голосов
/ 28 мая 2018

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

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

0 голосов
/ 28 мая 2018
public ArrayList<Candidate> candidates = new ArrayList<Candidate>();
Election(int numVotes)
{
    String name;
    ArrayList<Candidate> candidates = new ArrayList<Candidate>();
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Вы создаете другой массив и "затенение" переменной-члена candidates.Это должно быть

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