выбор определенных строк из связанного списка - PullRequest
2 голосов
/ 14 октября 2011

У меня есть связанный список, использующий узлы.Он распечатывается по алфавиту, но сейчас я пытаюсь распечатать людей, имена которых начинаются с определенной буквы, которую просит пользователь.Например: распечатать всех людей, чьи имена начинаются с буквы «А».Я уверен, что это не лучший способ сделать то, что у меня есть, но я просто пробую разные вещи, и я довольно новичок в связанном списке.Любые советы или советы или советы очень ценятся.

Вот то, что я думаю, что может быть полезным:

       public void findSameStartingLetter(BigNode front, String letter) {
       BigNode curr;
       curr = front; 
       String name;
       name = curr.dataitems;
       String d;
    //   char c; 
          while (curr.next != null){

              d = name.substring(0, 1);
            if (d.equals(letter)) {
                System.out.println(d);
              curr = curr.next;

         // for(int i=0; i < 1; i++) { 
              //  c = letter.charAt(i);
        //  }
              } 

          }
   }

Ответы [ 2 ]

2 голосов
/ 14 октября 2011

Похоже, вам нужно прочитать имя человека на узле в цикле, а не читать по имени, а затем не назначать эту переменную снова.

Вы также должны проверить, является ли текущий узел нулевым, а не следующий. Если вы проверите следующий, вы пропустите фамилию в списке.

Также убедитесь, что перемещение указателя в списке выполняется за пределами if, поскольку мы хотим проверить следующий узел независимо от того, какое имя имело место.

Помимо логики, похоже, вам немного не по себе из-за Java. Чтобы очистить ваш пример, вы можете использовать java-способность для делайера и присваивать значения в одну строку.

Кроме того, вместо выполнения подстроки и сравнения подстроки в строке Java есть метод startWith, который также должен выполнить свою задачу. Отличная работа!

public void findSameStartingLetter( BigNode front, String letter )
    {
        BigNode curr = front;
        while( curr != null )
        {
            String name = curr.dataitems;
            if( name.startsWith( letter ) )
            {
                System.out.println( name );
            }
            curr = curr.next;
        }
    }
0 голосов
/ 14 октября 2011

Выглядит хорошо для меня, единственное, что я бы изменил, это использовать equalsIgnoreCase() вместо просто equals(). Да, и оставьте линию curr = curr.next; за пределами if

...