Favicon Svetmobilne.cz  Svět mobilně Favicon Svetaudia.cz  Svět audia Favicon TVFreak.cz  TV Freak   Fórum Favicon Digimanie.cz  Digimanie   Fórum   Galerie
Zobrazené výsledky: 1 až 9 z 9

Téma: NullPointerException in Java

  1. #1
    Obyvatel SHW
    Registrace
    Aug 2007
    Příspěvků
    387

    Ahoj vsichni,
    mam drobny problem s programem na pocitani entropie slov. Teprve s programovanim zacinam, takze je asi napsany hodne neohrabane a zbytecne slozite. A asi v nem bude hodne chyb, ale to sem jeste nemel moznost osetrit, protoze se mi hned po startu zasekne s touhle chybovou hlasku
    "Exception in thread "main" java.lang.NullPointerException"

    Tady je kod, tak prosim nejakeho odpobrnika, jestli mi muze poradit. Potreboval bych, aby mi to proslo timhle ifem poked uzel nebude obsahovat zadne potomky (radek je zvyraznen ve tride "Trie").

    Predem vsem dekuju za pomoc.

    Vypis vystupu:
    Kód:
    init:
    deps-jar:
    compile-single:
    run-single:
    Exception in thread "main" java.lang.NullPointerException
            at Trie.Trie.Insert(Trie.java:72)
            at Trie.Trie.InsertData(Trie.java:40)
            at entropie.Entropie.InsertFile(Entropie.java:23)
            at entropie.Main.main(Main.java:28)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)
    trida main, package entropie:
    Kód:
    package entropie;
    
    import java.io.*;
    
    /**
     *
     * @author Wlcek
     */
    
    public class Main 
    {   
        
        
        public static void main(String[] args) throws IOException
        {
            Entropie strom = new Entropie();
            Entropie.INPUT_FILE = "C:\\Vstup.txt";
            Entropie.OUTPUT_FILE = "C:\\Vystup.txt";
            strom.InsertFile();
            strom.PrintFile();
        }
    
    }
    trida entropie, package entropie
    Kód:
    package entropie;
    import java.io.*;
    import Trie.*;
    
    /**
     *
     * @author Wlcek
     */
    
    public class Entropie
    {
        public static String INPUT_FILE;
        public static String OUTPUT_FILE;
        Trie strom;
        
        @SuppressWarnings("static-access")
        public void InsertFile() throws IOException
        {
            strom.InsertData(INPUT_FILE);
        }
        
        @SuppressWarnings("static-access")
        public void PrintFile() throws IOException
        {
            BufferedWriter writer = new BufferedWriter(new FileWriter(OUTPUT_FILE));
            writer.write(PrintHead());
            DataNode buffered = new DataNode();
            DataNode[] buffer = new DataNode[20];
            @SuppressWarnings("static-access")
            int count = strom.WordCount() - 1;
            buffer[0] = strom.GetData();
            do
            {
                int i= 1;
                buffered = strom.GetData();
                if(buffer[0].mCount > buffered.mCount)
                {
                    writer.write(buffer[0].mData +" "+ buffer[0].mCount +
                            " "+ Entropy(buffer[0].mCount));
                    buffer[0] = buffered;
                }
                else
                {
                    do
                    {
                        buffer[i] = buffered;
                        buffered = strom.GetData();
                        i++;
                        count--;
                    }while(buffered.mCount == buffer[i- 1].mCount);
                    Sort(buffer, i);
                    for(int j= 0; j < i; j++)
                    {
                        writer.write(buffer[j].mData +" "+ buffer[j].mCount +
                                " "+ Entropy(buffer[j].mCount));
                    }
                }
            }while((--count) != 0);
        }
        
        @SuppressWarnings("static-access")
        private String PrintHead()
        {
            return "Celkovy pocet slov: "+ strom.WordCount() 
                    +"\nCelkovy pocet ruznych slov: "
                    + strom.DifferentWordCount() +"\n----------------------------" +
                    "--------------\n\n";
        }
        
        @SuppressWarnings("static-access")
        private double Entropy(int wordCount)
        {
            return logb(wordCount/strom.WordCount());
        }
        
        private double logb(double value)
        {
            return Math.log10(value)/Math.log10(2.0);
        }
        
        @SuppressWarnings("static-access")
        private void Sort(DataNode[] data, int stop)
        {
            for(int i= 0; i < stop; i++)
            {
                data[i].mHash = hash(data[i].mData);
            }
            mergeSort(data, stop);
        }
        
        private int hash(String word) 
        {
           int hash = 0;
            int h = hash;
            if (h == 0) 
            {
                int off = 0;
                char val[] = word.toCharArray();
                int len = word.length();
                for (int i = 0; i < len; i++) 
                {
                    h = 31*h + val[off++];
                }
                hash = h;
            }
            return h;
        }
        
        private void mergeSort(DataNode[] pole, int stop)
        {
            DataNode[] tmpPole = new DataNode[pole.length];
            mergeSortRec(pole, tmpPole, 0, stop);
        }
        
        private void mergeSortRec(DataNode[] pole, DataNode[] tmpPole, int left, int right)
        {
            if(left < right)
            {
                int center = (left + right) / 2;
                mergeSortRec(pole, tmpPole, left, center);
                mergeSortRec(pole, tmpPole, center + 1, right);
                merge(pole, tmpPole, left, center + 1, right);
            }
        }
        
        @SuppressWarnings("static-access")
        private void merge(DataNode[] pole, DataNode[] tmpPole, int leftPos, int rightPos, int rightEnd)
        {
            int leftEnd = rightPos - 1;
            int tmpPos = leftPos;
            int pocetPrvku = rightEnd - leftPos + 1;
            while(leftPos <= leftEnd && rightPos <= rightEnd)
            {
                if(pole[leftPos].mHash <= pole[rightPos].mHash)
                {
                    tmpPole[tmpPos++] = pole[leftPos++];
                }
                else
                {
                    tmpPole[tmpPos++] = pole[rightPos++];
                }
            }
            while(leftPos <= leftEnd)
            {
                tmpPole[tmpPos++] = pole[leftPos++];
            }
            while(rightPos <= rightEnd)
            {
                tmpPole[tmpPos++] = pole[rightPos++];
            }
            for(int i= 0; i < pocetPrvku; i++, rightEnd--)
            {
                pole[rightEnd] = tmpPole[rightEnd];
            }
        }
    
    }
    trida trie, package trie
    Kód:
    package Trie;
    
    import java.io.*;
    
    /**
     *
     * @author Wlcek
     */
    
    public class Trie 
    {
        
        private static TrieNode mRootNode = new TrieNode(0);
        private static TrieNode mCurrentNode = new TrieNode();  
        private static int mDifferentWords = 0;
        
        public static void InsertData(String insert) throws IOException
        {
            int znak = 0;
            boolean aktualni = false;
            boolean predchozi = false;
            mCurrentNode = mRootNode;
            mCurrentNode.mChild = new TrieNode[26];
            BufferedReader reader = new BufferedReader(new FileReader(insert));     
            while((znak = reader.read()) != -1)                                     
            {
                if((znak < 94) && (znak > 64))                           
                {
                    znak += 32;                                               
                }
                aktualni = (znak < 123) && (znak > 96);              
                if(aktualni)                                                     
                {
                    Insert(znak);                                              
                    predchozi = true;                                        
                }
                else if(!aktualni &&predchozi)                            
                {
                    Insert(znak);                                             
                    predchozi = false;                                       
                    mCurrentNode.mWordCount ++;                    
                    mCurrentNode = mRootNode;                        
                    mCurrentNode.mWordCount ++;                    
                }
            }
            reader.close();
            mDifferentWords = DifferentWords();
        }
    
        @SuppressWarnings("empty-statement")
        private static void Insert(int znak)
        {
            int i= 0;
            boolean found = true;
            if(mCurrentNode.mChild == null)                                
            {
                mCurrentNode.mChild = new TrieNode[26];             
                mCurrentNode.mChild[0].mParent = mCurrentNode;
                mCurrentNode = mCurrentNode.mChild[0];              
                mCurrentNode.mLetter = znak;                             
                mCurrentNode.mWordCount = 0;                           
            }
            else                                                                    
            {
                for(; znak != mCurrentNode.mChild[i].mLetter ||                     
                        i < mCurrentNode.mChild.length; i++)                     
                {
                    found = false;                                               
                }
                if(found)                                                          
                {
                    mCurrentNode.mChild[i].mParent = mCurrentNode;
                    mCurrentNode = mCurrentNode.mChild[i];           
                }
                else if(!found)                                                   
                {
                    for(i= 0; mCurrentNode.mChild[i].mLetter != -1; i++);
                    mCurrentNode.mChild[i].mParent = mCurrentNode;
                    mCurrentNode = mCurrentNode.mChild[i];                
                    mCurrentNode.mWordCount = 0;                            
                }
            }
        }
        
        public static int WordCount()
        {
            return mRootNode.mWordCount;
        }
       
        public static int DifferentWordCount()
        {
            return mDifferentWords;
        }
        
        @SuppressWarnings({"static-access", "empty-statement"})
        public static DataNode GetData()
        {
            DataNode transport = new DataNode();                           
            int[] data = new int[20];                                               
            int index;                                                              
            data = Max(mRootNode);                                              
            transport.mCount = data[0];                                         
            mCurrentNode = mRootNode;                                               
            for(index= data.length; data[index] != -1; index--);          
            for(; index > 0; index--)
            {
                mCurrentNode = mCurrentNode.mChild[data[index]];      
                transport.mData =                                                   
                        transport.mData.concat(String.valueOf(mCurrentNode.mLetter));
                if(index == 1)
                {
                    mCurrentNode.mWordCount = 0;                             
                }
            }
            return transport;
        }
        
        @SuppressWarnings("empty-statement")
        private static int[] Max(TrieNode currentNode)                      
        {                                                                           
            int[] ret = new int[20];
            int[][] max = new int[20][];
            if(currentNode.mChild == null)                                 
            {
                ret[0] = currentNode.mWordCount;                      
                for(int i= 1; i < max.length; i++)
                {
                    ret[i] = -1;
                }
            }
            else if(currentNode.mWordCount != mRootNode.mWordCount)
            {
                for(int i= 0; i < currentNode.mChild.length; i++)               
                {
                    max[i] = Max(currentNode.mChild[i]);                         
                }
                ret = FindMax(max);                                                 
                if(currentNode.mWordCount > ret[0])                           
                {
                    ret = new int[20];                                              
                    ret[0] = currentNode.mWordCount;                        
                    for(int i= 1; i < max.length; i++)                            
                    {
                        ret[i] = -1;
                    }
                }
                else                                                                
                {
                    int j= 0;
                    for(; ret[j] != -1; j++);                                   
                    ret[j] = ret[ret.length - 1];                              
                    ret[ret.length - 1] = -1;                                  
                }
            }
            else                                                                   
            {
                for(int i= 0; i < currentNode.mChild.length; i++)     
                {
                    max[i] = Max(currentNode.mChild[i]);               
                }
                ret = FindMax(max);
                int j= 0;
                for(; ret[j] != -1; j++);                                      
                ret[j] = ret[ret.length - 1];                                 
                ret[ret.length - 1] = -1;                                     
            }
            return ret;
        }                                                                           
        
        private static int[] FindMax(int[][] data)                        
        {
            int maxValue = 0;
            int index = 0;
            for(int i= 0; i < data.length; i++)                              
            {
                if(data[i][0] > maxValue)                                           
                {
                    maxValue = data[i][0];
                    index = i;
                }
            }
            data[index][data.length - 1] = index;                        
            return data[index];                                                
        }
    
        private static int DifferentWords()
        {
            int count = 0;
            TrieNode CurrentNode = mRootNode;
            for(int i= 0; i < 20; i++)
            {
                count += Words(CurrentNode.mChild[i]);
            }
            return count;
        }
        
        private static int Words(TrieNode CurrentNode)
        {
            int count = 0;
            if(CurrentNode.mChild != null)
            {
                for(int i= 0; i < 20; i++)    
                {
                    count += Words(CurrentNode);
                }
            }
            if(CurrentNode.mWordCount != 0 &&
                    CurrentNode.mWordCount != -1)
            {
                count += 1;
            }
            return count;
        }
    
        
    }
    trida trieNode, package trie
    Kód:
    package Trie;
    
    /**
     *
     * @author Wlcek
     */
    
    public class TrieNode 
    {
        
        public TrieNode[] mChild = null;
        public TrieNode mParent = null;
        public int mLetter = -1;
        public int mWordCount = -1;
        
        public TrieNode(int letter, int wordCount)
        {
            mLetter = letter;
            mWordCount = wordCount;
        }
        
        public TrieNode(char letter, int wordCount)
        {
            mLetter = (int)letter;
            mWordCount = wordCount;
        }
        
        public TrieNode(char letter)
        {
            mLetter = (int)letter;
        }
        
        public TrieNode(int wordCount)
        {
            mWordCount = wordCount;
        }
        
        public TrieNode()
        {
        }
    }
    trida dataNode, package trie //pouzivam k predavani ruznorodych dat mezi tridami
    Kód:
    package Trie;
    
    /**
     *
     * @author Wlcek
     */
    
    public class DataNode 
    {
        public static String mData = "";
        public static int mCount = 0;
        public static int mHash = 0;
    }

    EDIT: Tak puvodni problem sem po osmi hodinach marne prace a prepracovavani celeho kodu vyresil restartem vyvojoveho prostredi NetBeans. Nicmene Se vyskytl stejny problem o kousek dale, protoze mi neprojde zvyraznena podminka.
    Naposledy upraveno uživatelem Wlcek: 11-05-2009 v 02:22
    Odpovídat lze po přihlášení

  2. #2
    Starousedlík SHW Avatar uživatele mstejska
    Registrace
    Dec 2007
    Příspěvků
    2,919

    mCurrentNode.mChild = new TrieNode[26];
    Tohle ti neudela 26 Trinodu, ale pouze pole pro 26 TriNodu, musis pro kazdy Trinode v poli naplnit.
    Viz tenhle priklad
    public static void main(String[] args) throws IOException
    {

    String tmpS[] = new String[20];
    System.out.println(tmpS[0].toString() + tmpS[1].toString());

    }
    taky ti to hodi NPE.

    public static void InsertData(String insert) throws IOException
    {
    int znak = 0;
    boolean aktualni = false;
    boolean predchozi = false;
    mCurrentNode = mRootNode;
    mCurrentNode.mChild = new TrieNode[26]; <= tady se ti to spatne inicializuje (Podle meho)

    PS: Kdyz budu mit vecer cas, tak se na to jeste mrknu. Schvalne se podivej jestli ti nejaky kod vola constructory TrieNode
    Naposledy upraveno uživatelem mstejska: 11-05-2009 v 10:02
    Odpovídat lze po přihlášení



  3. #3
    Obyvatel SHW
    Registrace
    Aug 2007
    Příspěvků
    387

    Ahoj,
    to sem si vubec neuvedomil a nebyl sem schopny si toho vimnout. Ale v tom pripade je pak
    mCurrentNode.mChild[0] == null
    tak proc mi to neprojde tou podminkou??

    EDIT: Tak sem pridal cyklus zaplneni pole uzly a podminku zmenil na
    mCurrentNode.mChild[0].mLetter == -1
    Naposledy upraveno uživatelem Wlcek: 11-05-2009 v 11:22
    Odpovídat lze po přihlášení

  4. #4
    Starousedlík SHW Avatar uživatele mstejska
    Registrace
    Dec 2007
    Příspěvků
    2,919

    Citace Původně odesláno od Wlcek Zobrazit příspěvek
    ...
    mCurrentNode.mChild[0] == null
    tak proc mi to neprojde tou podminkou??
    A kde mas takovou podminku? Mas tam pouze
    if(mCurrentNode.mChild == null)
    viz asi 55 radek, a to pole samozrejme neni null, je inicializovane.
    Odpovídat lze po přihlášení

  5. #5
    Obyvatel SHW
    Registrace
    Aug 2007
    Příspěvků
    387

    Ono uz to nejde editovat, tak sem to tam nemohl zmenit. Ale u sebe mam napsano
    mCurrentNode.mChild[0] = null;
    stejne mi to vraci NullPointerException

    Ale ted si vsimam, ze se mi cele vyvojove prostredi chova nejak divne. Dal sem cast kodu do komentare /* */ a ono to s nim stejne pracuje...
    Pokud to nenni schopne rozeznat zmenu v kodu, tak to asi nikdy neodladim, pokud to vubec pujde.

    EDIT:
    tak Insert mam ted takhle:

    trida trie/ package trie
    Kód:
        @SuppressWarnings("empty-statement")
        private static void Insert(int znak)
        {
            int i= 0;
            boolean found = true;
            if(mCurrentNode.mChild[0] == null)                           
            {
                mCurrentNode.mChild[0] = new TrieNode();
                mCurrentNode.mChild[0].mParent = mCurrentNode;
                mCurrentNode = mCurrentNode.mChild[0];             
                mCurrentNode.mLetter = znak;                            
                mCurrentNode.mWordCount = 0;                          
            }
            else                                                                    
            {
                for(; znak != mCurrentNode.mChild[i].mLetter ||       
                        i < mCurrentNode.mChild.length; i++)             
                {
                    found = false;                                               
                }
                if(found)                                                          
                {
                    mCurrentNode.mChild[i].mParent = mCurrentNode;
                    mCurrentNode = mCurrentNode.mChild[i];                         
                }
                else if(!found)                                                     
                {
                    for(i= 0; mCurrentNode.mChild[i].mLetter != -1; i++);         
                    mCurrentNode.mChild[i].mParent = mCurrentNode;
                    mCurrentNode = mCurrentNode.mChild[i];                         
                    mCurrentNode.mWordCount = 0;                                    
                }
            }
        }
    Naposledy upraveno uživatelem Wlcek: 11-05-2009 v 12:18
    Odpovídat lze po přihlášení

  6. #6
    Starousedlík SHW Avatar uživatele mstejska
    Registrace
    Dec 2007
    Příspěvků
    2,919

    Jako IDE pouzivam Eclipse.
    PS: Pak muzes mit problem s prostredim.
    PPS: konvence nazvu metod je prvni pismeno male. (to je pouze konvence)
    Jako strom muzes pouzivat DefaultTreeModel
    Pro sorteni Collections.sort()
    jako jmeno getteru promenne se pouziva getJmenoPromenne() atd
    Naposledy upraveno uživatelem mstejska: 11-05-2009 v 12:50
    Odpovídat lze po přihlášení

  7. #7
    Obyvatel SHW
    Registrace
    Aug 2007
    Příspěvků
    387

    Pozadavkem bylo, struktury a trideni naimplementovana zvlast, zadne defaultni funkce.
    S tim pojmenovanim sem se moc neparal, to je pravda, pripadalo mi to nejake divne :-)
    Jeste to upravim.

    @ PS: Mam ho zkusit preinstalovat?? Pouzivam NetBeans.
    Odpovídat lze po přihlášení



  8. #8
    Starousedlík SHW Avatar uživatele mstejska
    Registrace
    Dec 2007
    Příspěvků
    2,919

    Citace Původně odesláno od Wlcek Zobrazit příspěvek
    Pozadavkem bylo, struktury a trideni naimplementovana zvlast, zadne defaultni funkce.
    S tim pojmenovanim sem se moc neparal, to je pravda, pripadalo mi to nejake divne :-)
    Jeste to upravim.

    @ PS: Mam ho zkusit preinstalovat?? Pouzivam NetBeans.
    Aha
    Eclipse nemusis instalovat, staci rozbalit a spustit. (ma asi 100MB)
    V NetBeans ti neporadim, V eclipse delam 5 let.
    Odpovídat lze po přihlášení

  9. #9
    Obyvatel SHW
    Registrace
    Aug 2007
    Příspěvků
    387

    Tak sem to trochu predelal, a az na jeden detajl mi to myslim funguje. A tim je, ze po nalezeni maxima ve stromu, bych mu potreboval smazat promennou mWordCount, ale to muzu az po projiti celeho stromu. Jenze to se mi vzdycky prepise odkaz na dany uzel, uchovavany v pomocnem uzlu. Zvirazneno cervene (package Trie, class Trie, funkce getMax).

    Mate nekdo nejaky napad?? Me uz to moc nemysli.

    trida main, package entropie:
    Kód:
    package entropie;
    
    import java.io.*;
    
    /**
     *
     * @author Wlcek
     */
    
    public class Main 
    {   
        
        
        public static void main(String[] args) throws IOException
        {
            Entropie strom = new Entropie();
            Entropie.INPUT_FILE = "C:\\Vstup.txt";
            Entropie.OUTPUT_FILE = "C:\\Vystup.txt";
            strom.InsertFile();
            strom.PrintFile();
        }
    
    }
    trida entropie, package entropie
    Kód:
    package entropie;
    import java.io.*;
    import Trie.*;
    
    /**
     *
     * @author Wlcek
     */
    public class Entropie
    {
        public static String INPUT_FILE;
        public static String OUTPUT_FILE;
        Trie strom;
        
        @SuppressWarnings("static-access")
        public void insertFile() throws IOException
        {
            strom.insertData(INPUT_FILE);
        }
        
        public void printFile() throws IOException
        {
            printData(OUTPUT_FILE);
        }
        
        @SuppressWarnings("static-access")
        private void printData(String output) throws IOException
        {
            int words = strom.getDifferentWordCount();
            BufferedWriter writer = new BufferedWriter(new FileWriter(output));
            writer.write(printHead());
            do
            {
                DataNode tmp = strom.getMaxValue();
                writer.write(tmp.mData +" "+ tmp.mCount +" "
                        + entropy(tmp.mCount) +"\n");
                words--;
            }while(words > 0);
            writer.close();
        }
        
        @SuppressWarnings("static-access")
        private String printHead()
        {
            return "Celkovy pocet slov: "+ strom.getWordCount() 
                    +"\nCelkovy pocet ruznych slov: "
                    + strom.getDifferentWordCount() +"\n----------------------------" +
                    "--------------\n\n";
        }
        
        @SuppressWarnings("static-access")
        private double entropy(int wordCount)
        {
            return logb(strom.getWordCount()/wordCount);
        }
        
        private double logb(double value)
        {
            return Math.log10(value)/Math.log10(2.0);
        }
    
    }
    trida trie, package trie
    Kód:
    package Trie;
    
    import java.io.*;
    
    
    
    /**
     *
     * @author Wlcek
     */
    public class Trie 
    {
        
        private static TrieNode mRootNode = new TrieNode(0);
        private static TrieNode mCurrentNode;  
        private static int mDifferentWordCount = 0;
        private static int mWordCount = 0;
        
        public static void insertData(String input) throws IOException
        {
            int znak = 0;
            boolean aktualni = false;
            boolean predchozi = false;
            mRootNode.mChild = new TrieNode[26];
            mCurrentNode = mRootNode;
            BufferedReader reader = new BufferedReader(new FileReader(input));     
            while((znak = reader.read()) != -1)                                    
            {
                if((znak < 94) && (znak > 64))                                     
                {
                    znak += 32;                                                   
                }
                aktualni = (znak < 123) && (znak > 96);                           
                if(aktualni)                                                        
                {
                    insert(znak);                                                  
                    predchozi = true;                                              
                }
                else if(!aktualni && predchozi)                                   
                {
                    predchozi = false;                                              
                    if(mCurrentNode.mWordCount == 0)
                    {
                        mDifferentWordCount++;
                    }
                    mCurrentNode.mWordCount ++;                                     
                    mCurrentNode = mRootNode;                                       
                    mWordCount ++;                                                  
                }
            }
            reader.close();
        }
        
        @SuppressWarnings("empty-statement")
        private static void insert(int znak)
        {
            int i= 0, j= 0;
            for(; mCurrentNode.mChild[i] != null; i++);
            if(i > 0)
            {
                for(j= 0; j < i && mCurrentNode.mChild[j].mLetter != znak; j++);
                if(j < i)
                {
                    if(mCurrentNode.mChild[j].mLetter == znak)
                    {
                        i = j;
                    }
                }
            }
            if(mCurrentNode.mChild[i] == null)
            {
                mCurrentNode.mChild[i] = new TrieNode();
                mCurrentNode.mChild[i].mParent = mCurrentNode;
                mCurrentNode = mCurrentNode.mChild[i];
                mCurrentNode.mLetter = znak;
                mCurrentNode.mWordCount ++;
            }
            else if(mCurrentNode.mChild[i].mLetter == znak)
            {
                mCurrentNode = mCurrentNode.mChild[i];
            }
        }
            
        public static int getWordCount()
        {
            return mWordCount;
        }
       
        public static int getDifferentWordCount()
        {
            return mDifferentWordCount;
        }
        
        public static DataNode getMaxValue()
        {
            DataNode data = getMax(mRootNode);
            data.mDelete.mWordCount = 0;
            return data;
        }
        
        @SuppressWarnings({"static-access", "empty-statement"})
        public static DataNode getMax(TrieNode currentNode)
        {
            String word = new String();
            int[] tmp = new int[20];
            TrieNode helpNode;
            DataNode currentMax = new DataNode();     //pomocny uzel pro uchovani dat tykajicich se maxima 
            DataNode help = new DataNode();
            int i= 0;
            int j = 0;
            for(; i < 26 && currentNode.mChild[i] != null; i++)
            {
                currentMax = getMax(currentNode.mChild[i]); 
            }
            if(currentMax.mCount < currentNode.mWordCount)
            {
                currentMax.mCount = currentNode.mWordCount;
                helpNode = currentNode;
                for(; helpNode != mRootNode; j++)
                {
                    tmp[j] = helpNode.mLetter;
                    helpNode = helpNode.mParent;
                }
                for(j -= 1; j >= 0; j--)
                {
                    word = word.concat(String.valueOf((char)tmp[j]));
                }
                currentMax.mData = word;
                currentMax.mDelete = currentNode;
            }
            else if(currentMax.mCount == currentNode.mWordCount)
            {
                helpNode = currentNode;
                for(; helpNode != mRootNode; j++)
                {
                    tmp[j] = helpNode.mLetter;
                    helpNode = helpNode.mParent;
                }
                for(j -= 1; j >= 0; j--)
                {
                    word = word.concat(String.valueOf((char)tmp[j]));
                }
                for(j= 0;currentMax.mData.charAt(j) == word.charAt(j) && 
                        (j < currentMax.mData.length() -1 || j < word.length() - 1); j++);
                if(word.charAt(j) < currentMax.mData.charAt(j))
                {
                    currentMax.mCount = currentNode.mWordCount;
                    currentMax.mData = word;
                    currentMax.mDelete = currentNode;
                }
            }
            return currentMax;
        }   
      
    }
    trida trieNode, package trie
    Kód:
    package Trie;
    
    /**
     *
     * @author Wlcek
     */
    
    public class TrieNode 
    {
        
        public TrieNode[] mChild = null;
        public TrieNode mParent = null;
        public int mLetter = -1;
        public int mWordCount = -1;
        
        public TrieNode(int letter, int wordCount)
        {
            mLetter = letter;
            mWordCount = wordCount;
        }
        
        public TrieNode(char letter, int wordCount)
        {
            mLetter = (int)letter;
            mWordCount = wordCount;
        }
        
        public TrieNode(char letter)
        {
            mLetter = (int)letter;
        }
        
        public TrieNode(int wordCount)
        {
            mWordCount = wordCount;
        }
        
        public TrieNode()
        {
        }
    }
    trida dataNode, package trie //pouzivam k predavani ruznorodych dat mezi tridami
    Kód:
    package Trie;
    
    package Trie;
    
    /**
     *
     * @author Wlcek
     */
    public class DataNode 
    {
        public static String mData = new String();
        public static int mCount = 0;
        TrieNode mDelete = new TrieNode();
    }
    myslel sem ze se mi tam ten odkaz ulozi vzdy, kdyz budu ukladat hodnotu mData a mCount, ale prepise se to pokazde kdyz vytvorim pomocny uzel, pokazde kdyz se funkce sama zavola. Jen mData a mCount zustanou stejna dokud nenajdu nove maximum.
    Odpovídat lze po přihlášení

Podobná témata

  1. java navigace
    Od esetik v sekci Problémy s PC (HW/SW) a řešení
    Reakcí: 1
    Poslední příspěvek: 10-03-2011, 21:05
  2. JAVA - Netbean - obrázek
    Od petr.svec v sekci Programování
    Reakcí: 1
    Poslední příspěvek: 16-02-2010, 21:25
  3. Tutorial k Java-Scriptu
    Od panpelisek v sekci Programování
    Reakcí: 5
    Poslední příspěvek: 14-11-2008, 21:50
  4. Java - dotazy
    Od P@pi v sekci Programování
    Reakcí: 7
    Poslední příspěvek: 30-01-2008, 19:45
  5. ProjectX a Java nefunguje
    Od Elvis77 v sekci OS Windows
    Reakcí: 2
    Poslední příspěvek: 13-07-2007, 08:48