Мой учитель дал нам практическое задание, связанное со связанными списками. Я получил код для поиска и помощника по поиску, но у меня возникли проблемы с инициализацией поиска. Как я могу пойти об этом? Я попытался запросить у пользователя переменную, а затем выдать ее через метод поиска, но я получаю сообщение об ошибке «Метод 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() );
}
}