有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java for循环逻辑错误

我有一个家庭作业要输入一个字符串,并输出每个字母的数字。当我使用JOptionPane时,逻辑是有效的,我已经交了作业。然而,当我试图“转换”代码以使用JFrame JTextArea输入和输出时,输出不会显示正确的字符计数。我相信这在我的逻辑中很简单,但我看不出来

以下是输出结果:

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);

            }

        });
    }
}

共 (3) 个答案

  1. # 1 楼答案

    您的输入字符串设置为“”

    您需要将其设置为从用户处获得的输入文本

  2. # 2 楼答案

    首先,对于这样简单的应用程序,您不需要swing

    您需要做的是计算输入字符串中出现的字符数

    您应该做的是从所有gui人员中删除您的逻辑

    要做到这一点,请创建方法

    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]);
        }
    
    }
    

    然后你会发现你没有把输入传递给它

  3. # 3 楼答案

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

    试试这个:

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