Avatar billede Game_over_Goofy Nybegynder
29. december 2010 - 15:49 Der er 6 kommentarer

Java - LinkedList

Hejsa, jeg sidder med en opgave, jeg har svært ved at komme igang med.

Jeg skal lave en slags ordbog som en linkedlist uden brug af nogle former for brug af javas standard biblioteker der minder om collections.

dvs. jeg skal selv implementere en eller anden form for liste.

Der er følgende krav:
Ordene skal komme i alfabetisk orden, og der skal tælles hvor mange gange et ord forekommer.
og det skal naturligvis være muligt at tilføje og slette ord.

Der skal oprettes 2 klasser:  Dictionary og WordNode.

Jeg har selv tænkt på at klassen Dictionary skal oprette et object af WordNode for hvert nyt ord der skal tilføjes.

Dette har jeg forsøgt, men når jeg tilføjer nye ord, ser det ud til at den bare overskriver det gamle object og altså ikke opretter et nyt.

Dette er fra klassen Dictionary
/**
      * Add a word to the list if it isn't already present. Otherwise
      * increase the frequency of the occurrence of the word.
      * @param word  The word to add to the dictionary.
      */
    public void add(String word)
    {
        list = new WordNode();
        list.setWord(word);
                 
    }

Dette er fra klassen WordNode

public void setWord(String word)
    {
        this.word = word;
    }


Hvorfor opretter den ikke et nyt object når jeg anvender new WordNode();
Avatar billede heinzdmx Nybegynder
29. december 2010 - 16:34 #1
Når du laver din:

list = new WordNode();


Så gør du i virkeligheden det at du siger at din variable list skal overskride sin værdi og erstatte den med en ny af typen WordNode.

Du skal på en eller anden måde lave en liste.

En ide kan være at du laver det som et array, men det bliver lidt tungt for en stor mængde database  tror jeg, det at skulle lave et nyt array hver gang at du skal tilføje / fjerne værdier.

Det her kan måske være til lidt inspiration

http://www.geekinterview.com/question_details/52276

Ps. det lyder lidt som en skoleopgave.. hvor det skal gøres mere besværligt end det behøver..
Avatar billede Game_over_Goofy Nybegynder
29. december 2010 - 16:51 #2
ja det er nemlig en skoleopgave :)

Men hvis jeg bruger et array, benytter jeg mig vel af collections, hvilket jeg ikke må ?
Avatar billede heinzdmx Nybegynder
29. december 2010 - 17:12 #3
Den går ikke under Collection API så vidt jeg ved..

Hvis du ikke vil gøre det her så må din underviser jo kunne fortælle dig hvad du så skal gøre..

Du skal jo på en eller anden måde lave en liste..
Avatar billede tjens Nybegynder
29. december 2010 - 17:45 #4
Når du skal lave ordene i en linked list, skal object WordNode indeholde et member af typen WordNode, som f.eks. kan hedde Next.

Din setWord() methode i #0 skal være constructeren i stedet.

Og det er også WordNode som skal indeholde metode add().
Denne skal selv finde ud af om det nye ord er større en sig selv og derved kalde this.Next.add(newWordNode) eller sætte det nye ord ind på nuværende sted i kæden.

Har du lavet en Linked List opgave før?
Avatar billede odsgaard Praktikant
29. december 2010 - 18:26 #5
Det lyder som en af de opgaver jeg selv har været igennem :)

Du skal lave din Node, så den holder en referencer til den efterfølgende Node. Hvis det er en dobbeltlinked list skal du også have referencer til den foregående node. Hver Node skal så indeholde et ord.

Når du skal indsætte et ord i alfabetisk rækkefølge, kan du iterere gennem Noderne indtil du når til slutningen (next=null) eller du når til en Node hvor ordet skal indsættes foran.

public class WordNode{
  WordNode previous = null;
  WordNode next = null;
  String word = "";
}

Der skal selvfølgelig implementeres de forskellige get- og set- metoder.

Din dictionary kan så have en reference til den første node - og eventuelt til den sidste node. Der kan du bruge eventuelt oprette en start-node og en slutnode.

Hilsen
Brian
Avatar billede Game_over_Goofy Nybegynder
30. december 2010 - 00:54 #6
Hek brian, jeg begynder at forstå meningen nu, men jeg vender lige tilbage når jeg har lejet lidt med det, tak indtil videre !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester