Связанный список, поиск через - PullRequest
1 голос
/ 12 апреля 2011

Мой учитель дал нам практическое задание, связанное со связанными списками. Я получил код для поиска и помощника по поиску, но у меня возникли проблемы с инициализацией поиска. Как я могу пойти об этом? Я попытался запросить у пользователя переменную, а затем выдать ее через метод поиска, но я получаю сообщение об ошибке «Метод search (T) в типе List_3 не применим для аргументов (целое число)»

Программа должна: создать связанный список, запросить у пользователя значение для поиска, использовать метод поиска, который рекурсивно ищет указанный объект в связанном списке. Метод должен возвращать ссылку на значение, если оно найдено; в противном случае он должен возвращать ноль.

 import java.util.Scanner;


class ListNode< T > 
{
   T data; 
   ListNode< T > nextNode;


   ListNode( T object ) 
   { 
      this( object, null ); 
   } 

   ListNode( T object, ListNode< T > node )
   {
      data = object;    
      nextNode = node;  
   } 


   T getData() 
   { 
      return data; 
   } 


   ListNode< T > getNext() 
   { 
      return nextNode;
   } 
} 


public class List_3< T >
{
   private ListNode< T > firstNode;
   private ListNode< T > lastNode;
   private String name; 

   public static void main( String[] args )
   {
      Scanner scan = new Scanner(System.in);
      int result;
      List_3< Character > list1 = new List_3< Character >();
      Integer number;

      list1.insertAtFront( '3' );
      list1.insertAtFront( '4' );
      list1.insertAtBack( '5' );
      list1.insertAtBack( '6' );
      list1.insertAtFront( '2' );
      list1.insertAtFront( '1' );
      list1.insertAtBack( '7' );
      list1.insertAtBack( '8' );
      list1.insertAtFront( '0' );
      list1.insertAtBack( '9' );

      list1.print();
      System.out.println("Please enter a value to search for: ");
      number = scan.nextInt();
      result = search(number);
   }

   public List_3() 
   { 
      this( "list" ); 
   } 


   public List_3( String listName )
   {
      name = listName;
      firstNode = lastNode = null;
   } 


   public void insertAtFront( T insertItem )
   {
      if ( isEmpty() ) 
         firstNode = lastNode = new ListNode< T >( insertItem );
      else
         firstNode = new ListNode< T >( insertItem, firstNode );
   } 


   public void insertAtBack( T insertItem )
   {
      if ( isEmpty() )
         firstNode = lastNode = new ListNode< T >( insertItem );
      else
         lastNode = lastNode.nextNode = new ListNode< T >( insertItem );
   } 


   public T removeFromFront() throws EmptyListException
   {
      if ( isEmpty() ) 
         throw new EmptyListException( name );

      T removedItem = firstNode.data; 


      if ( firstNode == lastNode )
         firstNode = lastNode = null;
      else
         firstNode = firstNode.nextNode;

      return removedItem; 
   }


   public T removeFromBack() throws EmptyListException
   {
      if ( isEmpty() ) 
         throw new EmptyListException( name );

      T removedItem = lastNode.data; 


      if ( firstNode == lastNode )
         firstNode = lastNode = null;
      else 
      { 
         ListNode< T > current = firstNode;


         while ( current.nextNode != lastNode )
            current = current.nextNode;

         lastNode = current; 
         current.nextNode = null;
      } 

      return removedItem; 
   } 

   public boolean isEmpty()
   { 
      return firstNode == null;
   }

   public void print()
   {
      if ( isEmpty() ) 
      {
         System.out.printf( "Empty %s\n", name );
         return;
      } 

      System.out.printf( "The %s is: ", name );
      ListNode< T > current = firstNode;


      while ( current != null ) 
      {
         System.out.printf( "%s ", current.data );
         current = current.nextNode;
      } 

      System.out.println();
   } 


   public T search( T input )
   {
      return searchHelper( input, firstNode );
   } // end method search


   private T searchHelper( T input, ListNode< T > node )
   {
      if ( node == null )
         return null;
      else if ( node.getData().equals( input ) )
         return node.getData();
      else
         return searchHelper( input, node.getNext() );
   }

} 

1 Ответ

0 голосов
/ 14 апреля 2011

Вы смешиваете целое число с символом. Решите, каким будет ваш список: List<Integer> или List<Character> (или List<Object> или что вы хотите), но не пытайтесь искать и целочисленные значения в списке, заполненном символами ('1', '2' и т. д.).

'1'.equals (1) => false

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...