【问题标题】:How to print elements from linked list如何打印链表中的元素
【发布时间】:2020-04-17 15:10:32
【问题描述】:

我有一个链表类,其中包含一个控制器类和一个作为主类的测试类。代码运行并接受用户输入,但是当我单击显示所有输入的团队成员时,它是空的。 我哪里出错了?如何让所有输入的团队成员都显示出来?

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

【问题讨论】:

    标签: java oop data-structures linked-list


    【解决方案1】:

    第一个问题是团队成员不记得你给他们起的名字。为名称添加一个字段,以及一个检索它的方法:

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

    第三个可能的问题是每个“团队成员”都有一个团队成员列表。这让我感到困惑,让我怀疑你是否误读了本练习的说明。

    【讨论】:

    • 这有帮助!任何想法如何让 removeTeamMember 和 findTeamMember 工作?
    • 您正在比较一个团队成员列表,它是一个列表,一个名称,它是一个字符串。这种比较总是会告诉你“不,这些东西不相等”。让它比较名称与名称。我指的是看起来像这样的代码:if (t.getTeamMembers().equals(name)) { return "Name: " + t.getTeamMembers(); }
    • 我让 findTeamMember 工作,但我不知道如何让 removeTeamMember 工作,我将比较更改为名称。我还缺少其他东西吗?
    • 您当前版本的removeTeamMember 是什么样的?一个可能的问题是您在迭代列表时无法更改列表
    【解决方案2】:

    以下是使您的代码正常工作所需的最少代码更改。但是,如果您围绕此代码构建一个可工作的产品就绪系统,我建议您遵循设计模式。

    公共类 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<>();
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      相关资源
      最近更新 更多