Java 刽子手图片不是';t改变
我正忙着写一个刽子手应用程序,我正在检查一些代码是否有效。。。现在我还没有隐藏单词部分,所以在代码的地方我使用了if语句作为补充代码:Java 刽子手图片不是';t改变,java,swing,Java,Swing,我正忙着写一个刽子手应用程序,我正在检查一些代码是否有效。。。现在我还没有隐藏单词部分,所以在代码的地方我使用了if语句作为补充代码: if(original.indexOf(button.getText())!=-1){ JOptionPane.showMessageDialog(null, "Your word does contain" + text ); } else{
if(original.indexOf(button.getText())!=-1){
JOptionPane.showMessageDialog(null, "Your word does contain" + text );
}
else{
JOptionPane.showMessageDialog(null, "There is no" + text );
error++;
}
}
不管怎样,当我按下单词中没有的按钮时,它会增加我的错误
error++;
它只找到单词的第一个字母。我的一个词是恐龙当我按D时,它会说“是的,有一个D”,但当我按a时,它会说“不,没有我”
有人能帮忙吗
这是我的全部代码
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import javax.swing.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Random;
import java.util.List;
public final class Hangman extends JFrame implements ActionListener{
String original = readWord();
int error = 0;
String imageName;
JButton btnAddWord = new JButton("Add New Word");
JButton btnRestart = new JButton("Restart");
JButton btnHelp = new JButton("Help");
JButton btnExit = new JButton("Exit");
JLabel word = new JLabel(original);
static JPanel panel1 = new JPanel();
static JPanel panel2 = new JPanel();
static JPanel panel3 = new JPanel();
static JPanel panel4 = new JPanel();
public Hangman(){
Container content =getContentPane();
content.setLayout(new GridLayout(0,1));
if(error >= 0) imageName = "hangman1.jpg";
if(error >= 1) imageName = "hangman2.jpg";
if(error >= 2) imageName = "hangman3.jpg";
if(error == 3) imageName = "hangman4.jpg";
if(error == 4) imageName = "hangman5.jpg";
if(error == 5) imageName = "hangman6.jpg";
if(error == 7) imageName = "hangman7.jpg";
ImageIcon icon = null;
if(imageName != null){
icon = new ImageIcon(imageName);
}
JLabel image = new JLabel();
image.setIcon(icon);
btnAddWord.addActionListener(this);
btnRestart.addActionListener(this);
btnHelp.addActionListener(this);
btnExit.addActionListener(this);
panel2.add(image);
panel3.add(word);
panel4.add(btnAddWord);
panel4.add(btnRestart);
panel4.add(btnHelp);
panel4.add(btnExit);
for(char i = 'A'; i <= 'Z'; i++){
String buttonText = new Character(i).toString();
JButton button = getButton(buttonText);
panel1.add(button);
}
}
public JButton getButton(final String text){
final JButton button = new JButton(text);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(original.indexOf(button.getText())!=-1){
JOptionPane.showMessageDialog(null, "Your word does contain " + text );
}
else{
JOptionPane.showMessageDialog(null, "There is no " + text );
error++;
}
}
});
return button;
}
public String readWord(){
try{
BufferedReader reader = new BufferedReader(new FileReader("Words.txt"));
String line = reader.readLine();
List<String> words = new ArrayList<String>();
while(line != null){
String[] wordsLine = line.split(" ");
boolean addAll = words.addAll(Arrays.asList(wordsLine));
line = reader.readLine();
}
Random rand = new Random(System.currentTimeMillis());
String randomWord = words.get(rand.nextInt(words.size()));
return randomWord;
}catch (Exception e){
return null;
}
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == btnAddWord){
try{
FileWriter fw = new FileWriter("Words.txt", true);
PrintWriter pw = new PrintWriter(fw, true);
String word = JOptionPane.showInputDialog("Please enter a word: ");
pw.println(word);
pw.close();
}
catch(IOException ie){
System.out.println("Error Thrown" + ie.getMessage());
}
}
if(e.getSource() == btnRestart){
}
if(e.getSource() == btnHelp){
String message = "The word to guess is represented by a row of dashes, giving the number of letters and category of the word."
+ "\nIf the guessing player suggests a letter which occurs in the word, the other player writes it in all its correct positions."
+ "\nIf the suggested letter does not occur in the word, the other player draws one element of the hangman diagram as a tally mark."
+ "\n"
+ "\nThe game is over when:"
+ "\nThe guessing player completes the word, or guesses the whole word correctly"
+ "\nThe other player completes the diagram";
JOptionPane.showMessageDialog(null,message, "Help",JOptionPane.INFORMATION_MESSAGE);
}
if(e.getSource() == btnExit){
System.exit(0);
}
}
public static void main (String [] args){
Hangman frame = new Hangman();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 600);
frame.add(panel1, BorderLayout.NORTH);
frame.add(panel2, BorderLayout.CENTER);
frame.add(panel3, BorderLayout.SOUTH);
frame.add(panel4, BorderLayout.SOUTH);
}
}
import java.awt.*;
导入java.awt.event.*;
导入java.util.array;
导入javax.swing.*;
导入java.io.*;
导入java.util.ArrayList;
导入java.util.Random;
导入java.util.List;
公共最终类Hangman扩展JFrame实现ActionListener{
字符串original=readWord();
整数误差=0;
字符串图像名称;
JButton btnAddWord=新JButton(“添加新单词”);
JButton btnRestart=新JButton(“重启”);
JButton btnHelp=新JButton(“帮助”);
JButton btnExit=新JButton(“退出”);
JLabel word=新的JLabel(原件);
静态JPanel panel1=新的JPanel();
静态JPanel panel2=新的JPanel();
静态JPanel panel3=新的JPanel();
静态JPanel panel4=新的JPanel();
公众刽子手(){
容器内容=getContentPane();
setLayout(新的GridLayout(0,1));
如果(错误>=0)imageName=“hangman1.jpg”;
如果(错误>=1)imageName=“hangman2.jpg”;
如果(错误>=2)imageName=“hangman3.jpg”;
如果(错误==3)imageName=“hangman4.jpg”;
如果(错误==4)imageName=“hangman5.jpg”;
如果(错误==5)imageName=“hangman6.jpg”;
如果(错误==7)imageName=“hangman7.jpg”;
ImageIcon=null;
if(imageName!=null){
图标=新的图像图标(图像名称);
}
JLabel image=新的JLabel();
image.setIcon(图标);
btnAddWord.addActionListener(此);
btnRestart.addActionListener(此);
btnHelp.addActionListener(此);
btnExit.addActionListener(这个);
面板2.添加(图像);
第3组:添加(单词);
小组4.添加(btnAddWord);
面板4.添加(btnRestart);
面板4.添加(btnHelp);
面板4.添加(btnExit);
对于(char i='A';i我的第一个猜测是文本比较区分大小写
“恐龙”。indexOf(“A”)
与“恐龙”。indexOf(“A”)
我建议在比较时将文本转换为普通大小写
original.toLowerCase().indexOf(button.getText().toLowerCase())!=-1
这是因为您没有正确检查从文件中读取的单词是否与JButton
中的文本处于相同的大小写。有几种方法可以解决此问题:
正如@MadProgrammer所建议的。进行一些检查,以涵盖小写和大写字符
标准化
你的列出单词
也就是说,当你从文件中读取时,把所有的东西都放在一个大小写中。这样你就不必担心检查它是小写还是大写了。所以在这种情况下,你可能需要更改:字符串[]wordsLine=line.split(“”;
为字符串[]wordsLine=line.toLowerCase().split(“”;
或String[]wordsLine=line.toUpperCase().split(“”;
)(取决于您对哪一个操作感到满意)。然后使用单个indexOf()
操作进行检查看起来很好
:(以最快的手指为先!我正在写这篇文章作为我的答案,突然,可怕的词冒了出来:“这个问题的一个新答案”
:汉克斯并没有真正思考这个问题that@Sujay你不是很喜欢吗;)@程序员:啊,我已经习惯了D@user1614977如果这能解决你的问题,你能接受这个作为你的答案,那就太好了。@MadProgrammer:嗯,我当时正在键入答案……我想无论如何都要把它贴出来!谢谢!!:)