2015-04-15 3 views
-1

Я беру класс программирования У меня есть следующее задание.Связанный список Назначение школы

Напишите программу, управляемую меню, которая либо принимает слова, либо их значения, либо отображает список слов в лексикографическом порядке (например, в словаре). Когда запись должна быть добавлена ​​в словарь, вы должны сначала ввести слово как одну строку, а затем ввести значение как отдельную строку. Другое требование - время от времени слова устаревают. Когда это произойдет, такое слово должно быть удалено из словаря.

Используйте класс JOptionPane для ввода информации.

Используйте концепцию связанного списка для выполнения этого упражнения. Вам понадобятся как минимум следующие классы:

  • Класс WordMeaning, который содержит имя слова и его значение.
  • Класс WordMeaningNode, который создает узел информации и поле связи .
  • Класс WordList, который создает и поддерживает связанный список слов и их значения.
  • Класс словаря, который проверяет ваши классы.

Для вывода, программа должна производить два прокруткой списка:

  • Текущий список слов и их значений.
  • Список удаленных слов. Вам не нужно перечислять значения, только слова.

До сих пор у меня было все закодировано, кроме метода удаления, и я не уверен, как это кодировать, так что может кто-нибудь мне помочь. Я уже кодировал метод добавления, но теперь я не знаю, с чего начать с метода remove в моем классе WordList. Мои занятия ниже.

WordMeaning Класс:

public class WordMeaning { 

String name; 
String definition; 

WordMeaning(String t, String d) { 
    name = t; 
    definition = d; 
} 

String getName() { 
    return name; 
} 

String getDefinition() { 
    return definition;} 
} 

WordMeaningNode Класс:

public class WordMeaningNode { 

WordMeaning wordMeaning; 
WordMeaningNode next; 

WordMeaningNode(WordMeaning w) { 

    wordMeaning = w; 
    next = null; 
} 

public WordMeaning getWordMeaning() 
{ 
    return wordMeaning; 
} 
} 

WordList Класс:

public class WordList { 

WordMeaningNode list; 

WordList() { 
    list = null; 
} 

void add(WordMeaning w)// In alphabetical order 
{ 
    WordMeaningNode temp = new WordMeaningNode(w); 

    if (list == null) 
     list = temp; 
    else 
    { 
     WordMeaningNode aux = list; 
     WordMeaningNode back = null; 
     boolean found = false; 

     while(aux != null && !found) 
      if(temp.getWordMeaning().getName().compareTo(aux.getWordMeaning().getName()) < 0) 
       found = true; 
      else 
      { 
       back = aux; 
       aux = aux.next; 
      } 

     temp.next = aux; 
     if (back == null) 
      list = temp; 
     else 
      back.next = temp; 
    } 
} 

boolean listIsEmpty() { 
    boolean empty; 
    if (list == null) { 
     empty = true; 
    } else { 
     empty = false; 
    } 

    return empty; 
} 

public String toString() 
{ 
    String result = ""; 
    int count = 0; 
    WordMeaningNode current = list; 

    while (current != null) 
    { 
     count++; 
     result += current.getWordMeaning().getName() + "\n" + "\t" + current.getWordMeaning().getDefinition(); 
     current = current.next; 
    } 

    return result + "\nThe number of words is : " + count; 
} 
} 

словарь Класс:

import javax.swing.JOptionPane; 
import javax.swing.JTextArea; 
import javax.swing.JScrollPane; 

class Dictionary { 

public static void main(String[] args) { 
    WordMeaning entry; 
    WordList diction = new WordList(); 
    WordList obsolete = new WordList(); 
    boolean more = true; 
    int menuOption = 0; 

    String menuMessage = "1. Enter a word and its definition\n2. Remove a" 
      + "word\n3. Display all words and meanings\n4. Display" 
      + "Removed words\n\n " 
      + "Enter the Menu Option (1,2,3, or 4--Any other key" 
      + "exits the program)"; 

    do { 
     menuOption = GetData.getInt(menuMessage); //user input 

     switch (menuOption) { 
      case 1: 
       String word = GetData.getString("Enter the word to define:" 
         + " ").toUpperCase(); 
       String meaning = GetData.getString("Enter the meaning of " 
         + word + " : "); 
       meaning = " - " + meaning; 
       entry = new WordMeaning(word, meaning); 
       diction.add(entry); 
       JOptionPane.showMessageDialog(null, word + " was added to" 
         + " the dictionary.", "New Entry", 
         JOptionPane.INFORMATION_MESSAGE); 
       break; 

      case 2: 
       word = GetData.getString("Enter the obsolete word:") 
         .toUpperCase(); 

       try { 
        diction.remove(word); 
        obsolete.add(new WordMeaning(word, " ")); 
        JOptionPane.showMessageDialog(null, word + "has been removed!", "Word Removal", JOptionPane.INFORMATION_MESSAGE); 
       } catch (NullPointerException e) { 
        JOptionPane.showMessageDialog(null, word + "does not exist", "Word Removal", JOptionPane.INFORMATION_MESSAGE); 
       } 
       break; 

      case 3: 
       JTextArea text = new JTextArea(diction.toString(), 10, 40); 
       JScrollPane pane = new JScrollPane(text); 
       JOptionPane.showMessageDialog(null, pane, "Current" 
         + "Dictionary", JOptionPane.INFORMATION_MESSAGE); 
       break; 

      case 4: 
       text = new JTextArea(obsolete.toString(), 10, 40); 
       pane = new JScrollPane(text); 
       JOptionPane.showMessageDialog(null, pane, "Obsolete Words", 
         JOptionPane.INFORMATION_MESSAGE); 
       break; 
      default: 
       more = false; 

     } 
    } while (more); 
} 
} 

GetData Класс:

import javax.swing.JOptionPane; 
class GetData 
{ 
static double getDouble(String s) 
{ 
    return Double.parseDouble(getString(s)); 
} 

static int getInt(String s) 
{ 
    return Integer.parseInt(getString(s)); 
} 

static String getString(String s) 
{ 
    return JOptionPane.showInputDialog(s); 
} 
} 

ответ

0

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

Давайте назовем узел, который мы хотим удалить current и узел перед тем, что previous
(так что previous.next == current).
Затем только что установили previous.next = current.next и current ушли из вашего списка.

Особый случай, когда current является самым первым узлом, и в этом случае нет previous.
В этом случае установите list = list.next.

+0

Так что мне нужно сначала создать метод поиска? –

+0

Смущенный, извините. –

+0

Вы могли бы просто сделать это, как вы это сделали в методе 'add', с' aux' и 'back' ... – Siguza

0

Чтобы удалить узел:

  • diction.list Если есть искомый объект, заменить diction.list с diction.list.next

  • итерацию current по списку; если current.next - искомый объект, установите current.next в current.next.next.

+0

Мне нужно написать метод в классе WordList, хотя ... –

+0

Да, такая же сделка, замените 'diction' на' this'. – Amadan

Смежные вопросы