Как распечатать элементы из связанного списка - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть связанный класс списка с классом контроллера и тестовым классом, который является основным классом. Код запускается и принимает пользовательский ввод, однако, когда я нажимаю, чтобы отобразить всех введенных членов команды, он пуст. Где я ошибся? Как мне отобразить всех участников команды?

public class TeamMember {


private LinkedList<TeamMember> teamMembers;

public LinkedList<TeamMember> getTeamMembers() {
    return teamMembers;
}

public void setTeamMembers(LinkedList<TeamMember> teamMembers) {
    this.teamMembers = teamMembers;
}


private Scanner scan = new Scanner(System.in);

public TeamMember(String name) {
    this.teamMembers = new LinkedList<>();
}

}




package com.view;


import com.controller.TeamMemberController;
import com.model.TeamMember;

import java.util.InputMismatchException;
import java.util.Scanner;

public class TeamMemberTest {

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    TeamMemberController teamMemberController = new TeamMemberController();
    int userInput;

    do {

        System.out.println("1. Add a new team member");
        System.out.println("2. Find and display a team member");
        System.out.println("3. Remove a team member");
        System.out.println("4. Display all team members");
        System.out.println("0. Quit");

        //Validate user input
        try {
            userInput = scan.nextInt();
            scan.nextLine();
        } catch (InputMismatchException e) {

            //if anything other than an integer is entered.
            //The "scan.nextLine" fix above will not be triggered.
            //It has to appear in the catch as well.
            scan.nextLine();
            userInput = 5;
        }

        switch (userInput) {
            case 0:
                userInput = teamMemberController.quit();
                break;

            case 1:
                System.out.println("**********\n" + teamMemberController.addTeamMember());
                break;
            case 2:

                System.out.println("**********\n" + teamMemberController.findTeamMember());
                break;
            case 3:
                System.out.println("**********\n" + teamMemberController.removeTeamMember());
                break;
            case 4:
                teamMemberController.displayAllTeamMembers();
                break;
            default:
                System.out.println("*** Please Make another selection ***");
                System.out.println("");
                break;
        }
    } while (userInput != 0);
}

}




package com.controller;

import com.model.TeamMember;
import java.util.LinkedList;
import java.util.Scanner;


public class TeamMemberController {
private TeamMember teamMember;

public TeamMemberController() {
    String name = null;
    this.teamMember = new TeamMember(name);
}

Scanner scan = new Scanner(System.in);

public String addTeamMember() {
    System.out.println("To go back press 0");
    String name = null;

    boolean keepLooping = true;

    //get team member linked list
    LinkedList<TeamMember> teamMembers = teamMember.getTeamMembers();


    //user enters name
    while (keepLooping) {
        System.out.println("Enter team member name");
        //project names MUST be UNIQUE
        name = scan.nextLine();
        if (name.equals("0")) {
            return "team member not added";
        }

        if (!this.checkIfTeamMemberNameExists(name)) {
            keepLooping = false;
        } else {
            System.out.println("Team Member already exists");
            System.out.println("");
        }
    }



    //add team member to collection
    teamMembers.add(new TeamMember(name));

    teamMember.setTeamMembers(teamMembers);

    //returns true when a team member has been successfully added
    return "Name: " + name + "\n--Added--";
}

public String findTeamMember() {

    LinkedList<TeamMember> teamMembers = teamMember.getTeamMembers();

    //if the company has no team members no need to continue
    if (teamMembers.isEmpty()) {
        return "Sorry no team members";
    }

    //get here company must have team members
    System.out.println("Enter team member name");
    String name = scan.nextLine();


    for (TeamMember t : teamMembers) {
        if (t.getTeamMembers().equals(name)) {
            return "Name: " + t.getTeamMembers();
        }
    }
    return "Team member not found";
}

public String removeTeamMember() {

    LinkedList<TeamMember> teamMembers = teamMember.getTeamMembers();
    System.out.println("Enter name of team member to remove");
    System.out.println("Enter 0 to exit");
    String projectToRemove = scan.nextLine();
    boolean removed = false;

    if (projectToRemove.equals("0")) {
        return "No project removed";
    }

    //check existing team member names against the user input one
    for (TeamMember t : teamMembers) {
        if (t.getTeamMembers().equals(removeTeamMember())) {
            teamMembers.remove(t);
            removed = true;
        }
    }
    if (removed) {
        teamMember.setTeamMembers(teamMembers);
    } else
        return "No team member found";

    return removeTeamMember() + " has successfully been removed";
}

public void displayAllTeamMembers() {

    LinkedList<TeamMember> teamMembers = teamMember.getTeamMembers();
    if (teamMembers.isEmpty()) {
        System.out.println("Company has not added any team members");
        return;
    }


    System.out.format(" Name%n");

    for (TeamMember t : teamMembers) {


        System.out.println(t.getTeamMembers() + "         ");
    }

}


public int quit() {
    System.out.println("Are you sure you want to quit? y/n");
    String userResponse = scan.nextLine();
    boolean loop = true;

    while (loop) {

        if (userResponse.equalsIgnoreCase("y")) {
            System.out.println("Program ending");
            return 0;
        } else if (userResponse.equalsIgnoreCase("n"))
            return 5;
    }

    return 0;

}


public boolean checkIfTeamMemberNameExists(String name) {

    //get team member linked list
    LinkedList<TeamMember> teamMembers = teamMember.getTeamMembers();

    //if a team member with the same name already exists return true
    if (!teamMembers.isEmpty()) {
        for (TeamMember t : teamMembers) {
            if (t.getTeamMembers().equals(name)) {
                return true;
            }
        }
    }


    return false;
}


}

Это вывод, который я получаю. Как заставить его печатать введенные имена?

[1]: https://i.stack.imgur.com/FVhVm.png

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Первая проблема заключается в том, что TeamMembers не помнят имена, которые вы им даете. Добавьте поле для имени и метод для его получения:

private String name;
public TeamMember(String name) {
    this.name = name;
    this.teamMembers = new LinkedList<>();
}
public String getName() {
    return name;
}

Вторая проблема заключается в том, что displayAllTeamMembers не отображает «имя» члена команды. Не было никакого способа, которым это могло бы быть сделано, потому что у членов команды даже не было имени, но теперь они имеют.

public void displayAllTeamMembers() {

    LinkedList<TeamMember> teamMembers = teamMember.getTeamMembers();
    if (teamMembers.isEmpty()) {
        System.out.println("Company has not added any team members");
        return;
    }

    System.out.format(" Name%n");

    for (TeamMember t : teamMembers) {
        System.out.println(t.getName());
    }
}

Третья возможная проблема состоит в том, что у каждого отдельного «члена команды» есть список членов команды. Это просто сбивает меня с толку и заставляет задуматься, неправильно ли вы прочитали инструкции для этого упражнения.

0 голосов
/ 17 апреля 2020

Ниже приведено минимальное изменение кода, необходимое для работы вашего кода. Но я бы посоветовал следовать шаблонам проектирования раньше, если вы собираете работающую готовую к работе систему на основе этого кода.

publi c class TeamMember {

private static LinkedList<TeamMember> teamMembers;

public LinkedList<TeamMember> getTeamMembers() {
    return teamMembers;
}

public void setTeamMembers(LinkedList<TeamMember> teamMembers) {
    teamMembers = teamMembers;
}


private Scanner scan = new Scanner(System.in);

public TeamMember(String name) {
    if(teamMembers==null) {
        teamMembers = new LinkedList<>();
    }
}

}

...