#list #search #recursion
#Список #Поиск #рекурсия
Вопрос:
Мой учитель дал нам практическое задание, в котором рассматриваются связанные списки. Я получил код для поиска и searchhelper, но у меня возникли проблемы с фактической инициализацией поиска. Как я могу это сделать? Я попытался запросить у пользователя переменную, а затем отправить ее с помощью метода поиска, но я получаю сообщение об ошибке «Метод search (T) в типе List_3 неприменим для аргументов (целое число)»
Программа должна: создать связанный список, запросить у пользователя значение для поиска, использовать метод search, который рекурсивно выполняет поиск указанного значения в объекте связанного списка. Метод должен возвращать ссылку на значение, если оно найдено; в противном случае оно должно возвращать значение null.
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 resu<
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 %sn", 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. 1 за то, что не забыл отметить как домашнее задание =)
2. Где код для поиска и searchhelper?
3. это последние два метода в рамках метода печати.
4. В вашем списке используется тип «Character», а не integer.
5. Спасибо, что указали на эту часть, но моя проблема все еще сохраняется, мой параметр поиска продолжает доставлять неудобства при попытке заставить его выполнять поиск. Eclipse продолжает пытаться сделать метод search статичным, что все испортит. Он также пытается привести T к вещам, но приведение T выдаст мне ошибку (невозможно создать статическую ссылку на нестатический тип T)
Ответ №1:
Вы путаете целое число с символом. Решите, каким будет ваш список: List<Integer>
or List<Character>
(или List<Object>
или что угодно еще), но не пытайтесь искать и вводить целое число в списке, который вы заполнили символами (‘1’, ‘2’ и т.д.).
‘1’.равно(1) => false
Удачи!