2015-11-03 83 views
0

我想创建一个java applet,它使用文本字段将字符串添加到链接列表。我无法使搜索按钮正常工作。我试图在文本字段中获取用户指定的字符串,然后搜索列表并打印出该单词已找到多少次(如果有的话)。如何让我的计数变量正确递增?

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.LinkedList; 
import java.util.ListIterator; 

/** 
* Created by joshuaogunnote on 31/10/2015. 
*/ 

public class Applet2 extends JApplet { 

    private String text; 
    private int text1; 
    JTextField value1, value2; 
    LinkedList<String> list = new LinkedList<String>(); 
    public JLabel jLabel; 
    public int count = 0; 

我已经创建了这个search_count变量来计算单词被找到的次数。

public int search_count = 0; 

    public void init() { 

     JLabel prompt = new JLabel("Please enter a word"); 
     JLabel prompt1 = new JLabel("Please enter a certain letter"); 

     value1 = new JTextField(10); 
     value2 = new JTextField(10); 

     JPanel textPanel = new JPanel(); 
     textPanel.add(prompt); 
     textPanel.add(value1); 
     add(textPanel, BorderLayout.NORTH); 
     textPanel.add(prompt1); 
     textPanel.add(value2); 


     JPanel centrePanel = new JPanel(); 
     text = ""; 
     jLabel = new JLabel(text); 
     centrePanel.add(jLabel); 
     add(centrePanel, BorderLayout.CENTER); 


     JButton but = new JButton("Add word"); 
     JButton but1 = new JButton("Clear"); 
     JButton but2 = new JButton("Remove first occurrence"); 
     JButton but3 = new JButton("Remove all occurrences"); 
     JButton but4 = new JButton("Display all words begging with certain letter"); 
     JButton but5 = new JButton("Search"); 

     JPanel butPanel = new JPanel(); 

     butPanel.add(but); 
     butPanel.add(but1); 
     butPanel.add(but5); 
     butPanel.add(but2); 
     butPanel.add(but3); 
     butPanel.add(but4); 


     add(butPanel, BorderLayout.SOUTH); 

     but.addActionListener(new ButtonHandler(this)); 
     but1.addActionListener(new ButtonHandler1(this)); 
     but5.addActionListener(new ButtonHandler2(this)); 

    } 

    class ButtonHandler implements ActionListener { 

     private Applet2 theApplet; 

     public ButtonHandler(Applet2 app) { 
      theApplet = app; 
     } 

     public void actionPerformed(ActionEvent e) { 

      text = theApplet.value1.getText(); 

      try { 

       text1 = Integer.parseInt(text); 
       jLabel.setText("ERROR - The string " + "'" + text1 + "'" + " is not a valid word"); 

      } catch (NumberFormatException e1) { 

       if (text.length() != 0) { 
        jLabel.setText("Word " + "'" + text + "'" + " has been added to the list"); 
        count = count + 1; 
       } else { 
        jLabel.setText("ERROR - Please enter a word"); 
       } 

      } 

     } 
    } 

    class ButtonHandler1 implements ActionListener { 

     private Applet2 theApplet; 

     public ButtonHandler1(Applet2 app) { 
      theApplet = app; 
     } 

     public void actionPerformed(ActionEvent e) { 

      list.clear(); 
      jLabel.setText("List has been cleared"); 
      count = 0; 

     } 
    } 

    class ButtonHandler2 implements ActionListener { 

     private Applet2 theApplet; 

     public ButtonHandler2(Applet2 app) { 
      theApplet = app; 
     } 

     public void actionPerformed(ActionEvent e) { 

      String text = theApplet.value1.getText(); 

在这里,我试图用一个for循环列表和增量search_count所有的字符串进行迭代,如果发现匹配。但它不会产生正确的答案。我也试图在用户尝试搜索不在列表中的单词时产生错误消息。我如何获得search_count变量,以及如何在正确的时间显示ERROR消息?

  for (int i = 0; i < list.size(); i++) { 

       if(text.equals(list.get(i))){ 

        search_count = search_count + 1; 
       } else { 
jLabel.setText("ERROR - word is not in the list") 


      } 

      jLabel.setText("Word " + "'" + text + "'" + " was found " + search_count + " time(s) in the list"); 

      if (text.length() == 0) { 

       jLabel.setText("Please enter a word - The total number of words in the list are: " + count); 

      } 
     } 

    } 

} 
+0

这是奇怪的,和绝对的禁忌:(!)用一个异常来确定输入是正确的,即如果解析数*失败*,则输入或许是一个正确的*字*。我可以想出很多不是可解析数字的非单词。关于1-2 + 3呢? – laune

+0

是的你的权利,但我想不出任何其他方式来确定输入是否是一个有效的词 – jayoguntino

+0

检查正则表达式。首先,'text.matches(“[A-Za-z] +”)是一个布尔表达式,用于保证'text'中的字母只有字母。 – laune

回答

0

看来你在循环中使用它之前并没有将count声明为变量。如果输出不是你想要的/期望的,那么循环的条件会给你一些其他的东西,然后你认为它有什么作用。

int count = 0; 
+0

他的第二个代码片断是将search_count变量声明为0.再次检查 – MiKE

+0

是的,你是对的,它们被设置。不知道他的代码发生了什么。 – Flummox