簡體   English   中英

如何打印鏈表中的元素

[英]How to print elements from linked list

I've got a linked list class with a controller class and a test class which is the main class. 代碼運行並接受用戶輸入,但是當我單擊顯示所有輸入的團隊成員時,它是空的。 我哪里出錯了? 如何讓所有團隊成員輸入以顯示?

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


}

這是我得到的 output。 如何讓它打印輸入的名稱?

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

以下是使您的代碼工作所需的最少代碼更改。 但是,如果您圍繞此代碼構建一個可工作的產品就緒系統,我建議您先遵循設計模式。

公共 class 團隊成員 {

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

}

第一個問題是 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());
    }
}

第三個可能的問題是每個單獨的“團隊成員”都有一個團隊成員列表。 這讓我感到困惑,讓我想知道你是否誤讀了這個練習的說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM