2013-10-16 127 views
1

我有一个家庭作业分配来输入一个字符串并输出每个字母的使用数量。当我使用JOptionPane时,逻辑正在工作,并且我已经把作业翻过来了。但是,当我尝试将代码“转换”为使用JFrame JTextArea输入和输出时,输出不显示正确的字符数。我敢肯定,这是很简单的东西在我的逻辑,但我没有看到它A for循环逻辑错误

这里是输出的样子:

enter image description here

下面是代码

import javax.swing.*; 
import javax.swing.border.Border; 
import java.awt.*; 
import java.awt.event.*; 

public class Launcher extends JFrame 
{ 

    // create panel components 
    private static JTextArea txaUserInput; 
    private static JTextArea txaResults; 
    private static JButton btnSearch; 

    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame("Final Answer"); 
     Border b = BorderFactory.createMatteBorder(1, 1, 1, 1, Color.GRAY); 
     txaUserInput = new JTextArea(); 
     txaUserInput.setPreferredSize(new Dimension(220, 70)); 
     txaUserInput.setBorder(b); 
     txaUserInput.setLineWrap(true); 
     txaResults = new JTextArea("Results"); 
     txaResults.setPreferredSize(new Dimension(200, 500)); 
     txaResults.setBorder(b); 
     btnSearch = new JButton("Count Occurences of Each Letter"); 

     frame.setLayout(new FlowLayout()); 
     frame.add(txaUserInput); 
     frame.add(btnSearch); 
     frame.add(txaResults); 
     createAndShowGUI(); 
     frame.setSize(300, 700); 
     frame.setVisible(true); 
    } 

    private static void createAndShowGUI() 
    { 
     btnSearch.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       // create variables 
       int[] counts = new int[26]; 
       int count = 0; 

       String input = ""; 
       String output =""; 

       for (short i = 0; i < (input).length(); i++) 
       { 
        char temp = Character.toLowerCase((input).charAt(i)); 
        if (temp >= 'a' && temp <= 'z') 
         counts[temp - 'a']++; 
       } 

       for (short i = 0; i < counts.length; i++) 
       { 
        output += (char) ('a' + i) + ":\t " + counts[i] + "\n"; 
       } 

       for (short i = 0; i < (input).length(); i++) 
       { 
        if ((input).charAt(i) == 'a' || (input).charAt(i) == 'A') 
         count++; 
       } 

       txaResults.setText(output); 

      } 

     }); 
    } 
} 
+0

你可以减少你的代码示例只有部分有问题吗? –

+1

为什么你的'input'和'output'分配给空字符串?! – SudoRahul

+0

您不必在括号内输入变量。 –

回答

4

因为你的输入字符串是空的!

试试这个:

String input = txaUserInput.getText(); 
String output =""; 
+0

谢谢。我知道我错过了一些简单的事情:$ – user2802785

3

你输入字符串设定为 “”。

你需要将其设置为您从用户

1

首先,你不需要为这种简单的应用程序摇摆了输入文本。

你被要求做的是在输入字符串中计算char的出现次数。

你应该做的是从所有gui员工中删除你的逻辑。

做create方法

private void countAndPrintCharOccurance(String input) { 

int[] character = new int[1 << 8]; 


    char[] charArray = input.toCharArray(); 

    for(int idx = 0; idx < charArray.length; idx++) { 
     character[Character.toLowerCase(charArray[idx])]++; 
    } 

    for(int i ='a'; i <= 'z'; i++) { 
     System.out.println(((char) i) + " " + character[i]); 
    } 

} 

这时你会发现,你不输入传递给它。

+0

谢谢你的回应。我自我挑战的一部分是转换为GUI,以帮助我了解这一过程。不过,我在上面的代码片段中有一个问题。你能解释一下吗int [1 << 8];'我不确定我是否理解这个功能(我非常适合初学者) – user2802785

+0

这就是移位运算符。你移动1个八宫殿二进制'1 0000 0000'的女巫是256.这意味着该数组的大小将为256.这意味着我们将覆盖从x0到x100个字符的Unicode字符。 –