2012-06-03 2 views
0

Я пытаюсь сравнить два Древовидные карты и сравнить ключевые слова, то для тех, что оба карт имеют в общем, я хочу, чтобы добавить значения вместе и затем вывести это в текстовой областиОбъединения Древовидных карт для вывода аналогичных значений

Пока у меня есть два дерева, которые успешно работают, но я не могу понять, как их сравнивать, а остальное.

Вот мой код до сих пор:

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 
import java.util.Set; 
import java.util.TreeMap; 
import java.util.TreeSet; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.*; 
import javax.swing.border.Border; 
import javax.swing.border.TitledBorder; 


public class AnalysisFrame extends JFrame 
{ 
private static final int FRAME_WIDTH = 370; 
private static final int FRAME_HEIGHT = 700; 

JPanel displayPnl, filePnl, fileOnePnl, fileTwoPnl, textPnl, controlPnl, buttonPnl, infoPnl; 
JTextArea resultTA; 
JButton quitBtn, oneBtn, twoBtn, goBtn; 
JScrollPane resultSP; 
Border blackline, empty; 
Label infoLbl; 
File fileOne, fileTwo, finalFile; 

public AnalysisFrame() 
{ 
    setSize(FRAME_WIDTH, FRAME_HEIGHT); 
    displayPnl = new JPanel(); 

    createFilePanel(); 
    displayPnl.add(filePnl); 

    createTextPanel(); 
    displayPnl.add(textPnl); 

    createControlPanel(); 
    displayPnl.add(controlPnl); 

    add(filePnl, BorderLayout.NORTH); 
    add(textPnl, BorderLayout.CENTER); 
    add(controlPnl, BorderLayout.SOUTH); 

    this.setTitle("Steven Qualls - CP3 Final"); 
} 

private void createFilePanel() { 
    filePnl = new JPanel(); 

    createFileOnePanel(); 
    filePnl.add(fileOnePnl); 

    createFileTwoPanel(); 
    filePnl.add(fileTwoPnl); 



} 

      public void createFileOnePanel() { 
       fileOnePnl = new JPanel(); 

       TitledBorder fileOneB; 
       blackline = BorderFactory.createLineBorder(Color.black); 
       fileOneB = BorderFactory.createTitledBorder(blackline, "File 1"); 
       fileOneB.setTitleJustification(TitledBorder.CENTER); 
       fileOnePnl.setBorder(fileOneB); 

       oneBtn = new JButton("Choose File"); 

       fileOnePnl.add(oneBtn); 
       oneBtn.setPreferredSize(new Dimension (100,30)); 

         class OneButtonListener implements ActionListener 
         { 
          @Override 
          public void actionPerformed(ActionEvent evt) 
          { 
           final JFileChooser oneFC = new JFileChooser(); 
           oneFC.showOpenDialog(AnalysisFrame.this); 
           String newLine = null; 
           oneFC.getName(null); 
           int returnVal = 0; 
           File fileOne = oneFC.getSelectedFile(); 

    Scanner input = null; 
      try { 
       input = new Scanner(fileOne); 
      } catch (FileNotFoundException ex) { 
       Logger.getLogger(AnalysisFrame.class.getName()).log(Level.SEVERE, null, ex); 
      } 

    String inputText = input.nextLine(); 

    String[] words = inputText.split("[ \n\t\r,.;:!?(){}]"); 

    TreeMap<String, Integer> mapOne = new TreeMap<>(); 

    for(int i = 0; i < words.length; i++){ 
     String key = words[i].toLowerCase(); 

     if (words[i].length() > 1){ 
      if (mapOne.get(key) == null){ 
       mapOne.put(key, 1); 

      } 
      else { 
       int value = mapOne.get(key).intValue(); 
       value++; 
       mapOne.put(key, value); 


      } 
     } 


    } 
    /* Experimental Set Code 

    Set<String> setOne = mapOne.keySet(); 
    for (String key : setOne) 
    { 
     Integer value = mapOne.get(key); 

    } 
    * 
    */ 



          } 

         } 
         ActionListener oneListener = new OneButtonListener(); 
         oneBtn.addActionListener(oneListener); 

      } 



      public void createFileTwoPanel() { 
       fileTwoPnl = new JPanel(); 

       TitledBorder fileTwoB; 
       blackline = BorderFactory.createLineBorder(Color.black); 
       fileTwoB = BorderFactory.createTitledBorder(blackline, "File 2"); 
       fileTwoB.setTitleJustification(TitledBorder.CENTER); 
       fileTwoPnl.setBorder(fileTwoB); 

       twoBtn = new JButton("Choose File"); 

       fileTwoPnl.add(twoBtn); 
       twoBtn.setPreferredSize(new Dimension (100,30)); 

         class TwoButtonListener implements ActionListener 
         { 
          @Override 
          public void actionPerformed(ActionEvent evt) 
          { 
           final JFileChooser twoFC = new JFileChooser(); 
           twoFC.showOpenDialog(AnalysisFrame.this); 
           String newLine = null; 
           twoFC.getName(null); 
           int returnVal = 0; 
           File fileTwo = twoFC.getSelectedFile(); 

             Scanner input = null; 
      try { 
       input = new Scanner(fileTwo); 
      } catch (FileNotFoundException ex) { 
       Logger.getLogger(AnalysisFrame.class.getName()).log(Level.SEVERE, null, ex); 
      } 

    String inputText = input.nextLine(); 

    String[] words = inputText.split("[ \n\t\r,.;:!?(){}]"); 

    TreeMap<String, Integer> mapTwo = new TreeMap<>(); 

    for(int i = 0; i < words.length; i++){ 
     String key = words[i].toLowerCase(); 

     if (words[i].length() > 1){ 
      if (mapTwo.get(key) == null){ 
       mapTwo.put(key, 1); 

      } 
      else { 
       int value = mapTwo.get(key).intValue(); 
       value++; 
       mapTwo.put(key, value); 


      } 
     } 


    } 


          } 
         } 
         ActionListener twoListener = new TwoButtonListener(); 
         twoBtn.addActionListener(twoListener); 
      } 




private void createTextPanel() { 
    textPnl = new JPanel(); 

    resultTA = new JTextArea(100, 25); 
    resultTA.setEditable(false); 
    resultTA.setLineWrap(true); 
    resultTA.setWrapStyleWord(true); 

    resultSP = new JScrollPane(resultTA); 

    textPnl.add(resultTA); 
    textPnl.add(resultSP); 
} 

private void createControlPanel() { 
    controlPnl = new JPanel(); 
    controlPnl.setLayout(new GridLayout(2,1)); 


    createInfoPanel(); 
    controlPnl.add(infoPnl); 

    createButtonPanel(); 
    controlPnl.add(buttonPnl); 


} 

      private void createInfoPanel() { 
       infoPnl = new JPanel(); 

       JLabel infoLbl = new JLabel("Execute will find and output words both files have in common.", JLabel.CENTER); 
       infoPnl.add(infoLbl); 
      } 

      private void createButtonPanel() { 
       buttonPnl = new JPanel(); 

       goBtn = new JButton("Execute"); 
       quitBtn = new JButton("Quit"); 

       buttonPnl.add(goBtn); 
       buttonPnl.add(quitBtn); 

       goBtn.setPreferredSize(new Dimension (100,30)); 
       quitBtn.setPreferredSize(new Dimension (100,30)); 





       class QuitButtonListener implements ActionListener 
       { 
        @Override 
        public void actionPerformed(ActionEvent evt) 
        { 
         System.exit(0); 
        } 
       } 

         ActionListener quitListener = new QuitButtonListener(); 
         quitBtn.addActionListener(quitListener); 

       class GoButtonListener implements ActionListener 
       { 
        @Override 
        public void actionPerformed(ActionEvent evt) 
        { 


        } 
       } 
         ActionListener goListener = new GoButtonListener(); 
         goBtn.addActionListener(goListener); 

      } 


} 

Вот некоторые псевдо-код, который я придумал, я не уверен, если это возможно, или будет работать, но это был единственный способ, которым я мог придумать, как сделать это

Get a word from mapOne 
Check if word exists in mapTwo //This part is going to be the hardest I'm pretty sure 
If word is found, get the key and set as freq2 then remove from mapTwo //Not sure if this is even needed 
If word is not found in mapTwo, remove word from mapOne 
Check mapOne.isEmpty if true, end loop 

Я также, кажется, есть проблема с моим скобками или что-то, я новичок в программировании, так что может быть что-то подобное, но когда я делаю свои Древовидные карты, я могу выводить их успешно в том же блок кода, но если я пойду на дно и попытаюсь вывести его в другом месте, он появится как null r не найден, как карта существует только в этой области, я знаю, что должен знать, почему это происходит, но я не хочу, я предполагаю, что-то делать с публичным или частным или что-то в этом роде.

Спасибо за любую помощь заранее, извините, что так большой вопрос, я просто очень потерян.

+0

Проблема, которую вы * действительно пытаетесь решить, - это «выходные данные, когда две карты содержат одну и ту же вещь». Для SO, чтобы помочь, вы хотите написать наименьшую возможную программу, которая делает это, - так что отключите графический интерфейс и просто покажите нам простой пример с двумя жестко запрограммированными картами, где вы пишете свой вывод на консоль. Вы можете добавить в графический интерфейс позже, когда основная программа работает. –

+0

На самом деле, это тот же совет, который Андрей дал вам, когда вы разместили свой [другой вопрос] (http://stackoverflow.com/questions/10826308/getting-keywords-from-two-files). Пожалуйста, учтите это. –

ответ

4

Я пытаюсь сравнить два Древовидные карты карты и сравнить уровне ключевых слов ключи, то для тех, что обе карты имеют в общем, я хочу добавить конкатенации значения вместе и затем выводят этот в текстовую область .

final Set<String> intersection; 
final Set<String> values2; 

// Since we're going to mutate the first set, we create a new set that is 
// completely independent from the map. We fill it with they keys of the 
// first map. 

intersection = new HashSet<String>(map1.keySet()); // get the first map's keys 
values2 = map2.keySet();       // ... and the second map's keys 

intersection.retainAll(values2);     // find the intersection 

for (String key : intersection)      // for each value in both sets ... 
{             // ... output the details 
    System.out.println("key: " + key); 
    System.out.println("value 1: " + map1.get(key)); 
    System.out.println("value 2: " + map2.get(key)); 
} 

См: Set.retainAll().

+0

Чтобы прояснить ответ @ Greg, структура данных, которую вы используете, - это «Карта». «TreeMap» - это одна реализация («HashMap» - это другая), но реализация - это деталь, которая не влияет на вопрос. Ответ будет таким же, если вы используете «HashMap». –

+0

@ Jim: Спасибо - да, это полезная вещь, чтобы указать. –

+0

Wow Спасибо, извините за все мои ошибки. У меня есть еще один вопрос: почему, когда я называю карты позже, у них больше нет информации в них? – Quallssm

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