Как я могу найти связанный список объектов для определенного поля? - PullRequest
0 голосов
/ 13 мая 2018

Я пишу программу, которая сохраняет объекты моего класса «TeamRecord» в связанный список.У меня проблемы с получением метода поиска для работы.Приведенный ниже код работает для связанного списка, который содержит только строки, но так как это связанный список объектов TeamRecord, мне нужно выяснить, как смотреть только на поле имени команды.

вызов метода поиска:

case 5:     
    System.out.println("Enter team name to search: ");
    String input = console.next();

    if(teams.search(input))
        System.out.println(input + " is a team.");
    else
    System.out.println(input + " is not a team.");

    break;

Я получаю сообщение об ошибке, поскольку строковый ввод не может быть преобразован в TeamRecord

Метод поиска:

public boolean search(E element) {
  if(isEmpty())
     return false;
  //create a new node for the element

  Node<E> temp = new Node<E>(element, null);
  temp = head;

  while(temp != null)
  {
     if(temp.getElement().equals(element))
        return true;

     temp = temp.getNext();
  }

  return false; 
}

Я пытался это сделать:

if(teams.getTeamName().search(input))

Это не работает, потому что «команды» - это название LinkedList, поэтому я не смотрю на отдельные объекты.Я не совсем уверен, как подойти к этой проблеме.Любая помощь будет принята с благодарностью

Я опубликую остальную часть кода здесь на случай, если вышеприведенного недостаточно:

public class TeamRecord implements Comparable<TeamRecord>{

private String teamName;
private int totalWin;
private int totalLoss;

public TeamRecord() {
}

public TeamRecord(String teamName, int totalWin, int totalLoss) {
    this.teamName = teamName;
    this.totalWin = totalWin;
    this.totalLoss = totalLoss;
}

public String getTeamName() {
    return teamName;
}

public void setTeamName(String teamName) {
    this.teamName = teamName;
}

public int getTotalWin() {
    return totalWin;
}

public void setTotalWin(int totalWin) {
    this.totalWin = totalWin;
}

public int getTotalLoss() {
    return totalLoss;
}

public void setTotalLoss(int totalLoss) {
    this.totalLoss = totalLoss;
}

public int compareTo(TeamRecord T) {
    return this.teamName.compareTo(T.teamName);

}
@Override
public String toString() {
    return "\n\nTeam Name: " + teamName + "\nTotal Wins: " + totalWin + 
            "\nTotal Losses: " + totalLoss;
}



}

Связанный список:

public class MyLinkedList<E> {

   //data members
   private Node<E> head;
   private Node<E> tail;

   int size;

      //contructor
   public MyLinkedList(){
      head = null;
      tail = null;
      size = 0;
   }

   public boolean isEmpty(){
      if(head == null)
         return true;

      return false;
   }

   public int size(){
      return size;
   }

   public void addFirst(E element){

      //create a new node for the element

      Node<E> temp = new Node(element, null);

      //if the list is empty
      if(isEmpty()){
         head = temp;
      }
      else{
         //temp's next = head
         temp.setNext(head);
         head = temp;

      }
      size++;
   } 

   public E removeFirst() throws EmptyListException {

      if(isEmpty()) 
         throw new EmptyListException("This list is empty.");

      Node<E> temp = head;

         //move head to head next
      head = head.getNext();

      E result = temp.getElement();

      temp.setNext(null);
      temp = null;

      size--;

      return result;

   }
   public void addLast(E element) {

      //create a new node for the element

      Node<E> temp = new Node<E>(element, null);

      if(head != null)
      {
         Node<E> tail = head;
         while(tail.getNext() != null)
         {
            tail = tail.getNext();
         }
         tail.setNext(temp);
      }
      else
         head = temp;

      size++;

   }

   public boolean search(E element) {
      if(isEmpty())
         return false;
      //create a new node for the element

      Node<E> temp = new Node<E>(element, null);
      temp = head;

      while(temp != null)
      {
         if(temp.getElement().equals(element))
            return true;

         temp = temp.getNext();
      }

      return false; 
   }

   public String traverse(){

      if(isEmpty())
         return "Empty list";

      String result = "Head --->";

      int i = size;

      Node<E> temp = head;

      while(i > 0){
         result += temp.getElement();
         temp = temp.getNext();
         i--;
      }
      return result;
   }

}//end of class

Класс узла:

 class Node<E> {

   //data members
   private E element;
   private Node<E> next;

   //constructors
   public Node() {
      this(null, null);
   }

   public Node(E element, Node<E> next) {
      this.element = element;
      this.next = next;
   }

   //setters and getters
   public void setElement(E element) {
      this.element = element;
   }

   public void setNext(Node<E> next) {
      this.next = next;
   }

   public E getElement() {
      return element;
   }

   public Node<E> getNext() {
      return next;
   }

}

Клиент:

public class TeamRecordClient {

   static Scanner console = new Scanner(System.in);

   public static int main(String [] args) {

      MyLinkedList<TeamRecord> teams = new MyLinkedList();


      boolean flag = true;
      int userCommand;
      while (flag) {
         showMenu();

         userCommand = console.nextInt();

         switch (userCommand) {
              //addFirst
            case 1:
               System.out.println("Enter Team Name: ");
               String name = console.next();

               System.out.println("Enter Total Wins: ");
               int totalWins = console.nextInt();

               System.out.println("Enter Total Losses: ");
               int totalLosses = console.nextInt();

               teams.addFirst(new TeamRecord(name, totalWins, totalLosses));


               break;
              //removeFirst
            case 2:
               try{
                  TeamRecord result = teams.removeFirst();

                  System.out.println("Removed Team: " + teams.toString());
               }
               catch(EmptyListException e) {
                  System.out.println(e.toString());
               }
               break;
              //addLast
            case 3:
               System.out.println("Enter Team Name: ");
               String name1 = console.next();

               System.out.println("Enter Total Wins: ");
               int totalWins1 = console.nextInt();

               System.out.println("Enter Total Losses: ");
               int totalLosses1 = console.nextInt();

               teams.addLast(new TeamRecord(name1, totalWins1, totalLosses1));

               break;
              //traverse
            case 4:
               System.out.println(teams.traverse());

               break;
              //search for a element
            case 5:     
               System.out.println("Enter team name to search: ");
               String input = console.next();

               if(teams.search(input))
                  System.out.println(input + " is a team.");
               else
                  System.out.println(input + " is not a team.");

               break;

            case 0:
               flag = false;
               break;
            default:
         }
      }//end main
   }     
   private static void showMenu() {
      System.out.print("\n\n"
                + "\n1 - Add First"
                + "\n2 - Remove First"
                + "\n3 - Add Last"
                + "\n4 - Traverse"
                + "\n5 - Search"
                + "\n6 - Selection Sort(Team Name)"
                + "\n7 - Quick Sort(Total Wins)"
                + "\n0 - Exit "
                + "\nEnter a command: ");
   }

}//end of class

1 Ответ

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

Я предлагаю вам изменить search() метод, чтобы использовать предикат вместо:

public boolean search(Predicate<? super E> predicate) {
    Node<E> temp = head;
    while (temp != null) {
        if (predicate.test(temp.getElement()))
            return true;
       temp = temp.getNext();
    }
    return false; 
}

Тогда вы можете указать для поиска Predicate:

if (teams.search(e -> e.getTeamName().equals(input))
    System.out.println(input + " is a team.");
else
    System.out.println(input + " is not a team.");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...