用到数组我还是写不出来怎么回事

Java编写打字训练,首先显示一行文字,然后每次输入一个字母,如果对了就把这个字母设置为绿色,如果不对,则改为输入的字母,并且显示为红色,怎么实现的呢?是不是需要用到数组?用到数组我还是写不出来怎么回事

这个问题我有尝试,目前能实现的是把标红的放在了原数组的末尾,你可以自行修改,效果如下:

img

import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TypingTraining extends JFrame implements KeyListener {
    private JLabel textLabel;
    private char[] targetText = "testcontent".toCharArray();

    public TypingTraining() {
        super("Typing Training");
        textLabel = new JLabel();
        textLabel.setText(String.valueOf(targetText));
        add(textLabel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 100);
        addKeyListener(this);
    }

  @Override
public void keyTyped(KeyEvent e) {
    char inputChar = e.getKeyChar();
    if (Character.isLetter(inputChar)) {
        int index = textLabel.getText().indexOf(inputChar);
        if (index != -1) {
            char[] newLabelText = textLabel.getText().toCharArray();
            newLabelText[index] = Character.toLowerCase(inputChar);
            textLabel.setText(String.valueOf(newLabelText));
            textLabel.setForeground(Color.GREEN);
        } else {
            String newLabelText = textLabel.getText() + inputChar;
            textLabel.setText(newLabelText);
            textLabel.setForeground(Color.RED);
        }
    }
}


    @Override
    public void keyPressed(KeyEvent e) {
    }

    @Override
    public void keyReleased(KeyEvent e) {
        textLabel.setForeground(Color.BLACK);
    }
}
import javax.swing.JFrame;

public class Main {
    public static void main(String[] args) {
        TypingTraining typingTraining = new TypingTraining();
        typingTraining.setVisible(true);
    }
}


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

是的,要实现这个打字训练的功能,使用数组是一个不错的选择。下面是一个使用Java编写的示例代码,可以实现你所描述的功能:

import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TypingTraining implements KeyListener {
    private JFrame frame;
    private JLabel textLabel;
    private String targetText = "Hello, world!";
    private char[] inputText;
    private int currentIndex;

    public TypingTraining() {
        frame = new JFrame("Typing Training");
        textLabel = new JLabel(targetText);
        frame.add(textLabel);
        frame.addKeyListener(this);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 100);
        frame.setVisible(true);

        inputText = new char[targetText.length()];
        currentIndex = 0;
    }

    @Override
    public void keyTyped(KeyEvent e) {
        char inputChar = e.getKeyChar();
        if (inputChar == targetText.charAt(currentIndex)) {
            inputText[currentIndex] = inputChar;
            currentIndex++;
            textLabel.setText(new String(inputText));
            textLabel.setForeground(Color.GREEN);
        } else {
            textLabel.setForeground(Color.RED);
        }

        if (currentIndex == targetText.length()) {
            frame.removeKeyListener(this);
        }
    }

    @Override
    public void keyPressed(KeyEvent e) {
        // Not used in this implementation
    }

    @Override
    public void keyReleased(KeyEvent e) {
        // Not used in this implementation
    }

    public static void main(String[] args) {
        new TypingTraining();
    }
}

这个代码使用了Swing库来创建一个简单的窗口,并将文字显示在窗口中。在键盘输入的过程中,它会检查输入的字符是否与目标文字的当前字符匹配。如果匹配,则将输入字符添加到输入文字的数组中,并将显示的文字设为绿色;如果不匹配,则将显示的文字设为红色。

在这个示例中,targetText 是要显示和输入的目标文字,inputText 是用于存储用户输入的字符数组。currentIndex 跟踪用户当前正在输入的字符的索引。

你可以根据自己的需要进行修改和扩展,例如添加计时器、计分系统等。

希望这个示例能帮助你更好地理解如何使用数组来实现打字训练的功能。