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 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);
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话: int countsDifferent=0; // 标签数字与数组元素不同的次数
int different=0; // 标签数字
Random rd= new Random();
outCycle: //外层循环标签
/**产生标签数字并验证
***/
while(true){
different=rd.nextInt(); // 产生一个标签数字
for(int num : copiedNums){
/**如标签数字与数组中任一元素相同,
* 则退出内层循环,继续产生新的标签数字,进行
* 下一次外层循环,即再次进行些内层循环中
**/
if(different == num ){
break;
/**如标签数字与数组中任一元素不同,
* 标签不同次数变量则加1,当countsDifferent等于
* 数组长度时,则表明标签数字与数组所有元素都不同。
* 此时退出外层循环,即整个二重循环体结束。标签数字
* 达的值达到了设计目的。
**/
}else{
countsDifferent++;
if(countsDifferent>=copiedNums.length){
break outCycle;
}
}
}
}
是的,要实现这个打字训练的功能,使用数组是一个不错的选择。下面是一个使用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
跟踪用户当前正在输入的字符的索引。
你可以根据自己的需要进行修改和扩展,例如添加计时器、计分系统等。
希望这个示例能帮助你更好地理解如何使用数组来实现打字训练的功能。