import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
import java.awt.*;
public class Guess extends JFrame
{
private JLabel l1;
private JLabel l2;
private JTextField t1;
private JButton b[]=new JButton[2];
static Random r1=new Random();
int rand=r1.nextInt(1000)+1;
public Guess()
{
super("Guess the number game ");
l1=new JLabel("Guess The number");
l2=new JLabel(" ");
t1=new JTextField(5);
b[0]=new JButton("Check");
b[1]=new JButton("Reset");
setLayout(new FlowLayout());
add(l1);
add(t1);
perform action=new perform();
resettt reseting=new resettt();
add(b[0]);
b[0].addActionListener(action);
add(b[1]);
b[1].addActionListener(reseting);
add(l2);
}
private class perform implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String s1=t1.getText();
int g=Integer.parseInt(s1);
if(g>rand)
{
l2.setText("Too high");
t1.setBackground(Color.CYAN);
}
else if(g<rand)
{
l2.setText("Too low");
t1.setBackground(Color.RED);
}
else if(g==rand)
{
t1.setBackground(Color.WHITE);
t1.setEditable(false);
t1.setText("Correct");
l2.setText(" ");
}//end of last if
}//end of actionPerformed
}//end perform
private class resettt implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
t1.setText(" ");
t1.setBackground(Color.WHITE);
t1.setEditable(true);
l2.setText(" ");
rand=r1.nextInt(1000)+1;
}
}
public static void main(String args[])
{
Guess t=new Guess();
t.setVisible(true);
t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
t.setSize(350,100);
t.setLocationRelativeTo(null);
}
}
现在的问题是,当我按下重置按钮时,它会显示几个错误
注意:错误不是在构建程序之后,它会在单击RESET按钮后在CMD中显示一些脚本
这些是错误:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: " 1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.parseInt(Integer.java:527)
at Guess$perform.actionPerformed(Guess.java:47)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
答案 0 :(得分:1)
您的解决方案很简单:
Integer.parseInt(s1);
与[{1}}交换,可能事先添加Integer.parseInt(s1.trim());
。
https://docs.oracle.com/javase/6/docs/api/java/lang/String.html#trim():
public String trim()返回字符串的副本,带有前导和 尾随空格省略。如果此String对象表示空 字符序列,或字符的第一个和最后一个字符 此String对象表示的序列都具有更大的代码 比'\ u0020'(空格字符),然后是对这个字符串的引用 返回对象。
否则,如果没有代码大于'\ u0020'的字符 在字符串中,然后是一个表示空字符串的新String对象 已创建并返回。
否则,让k为字符串中第一个字符的索引 其代码大于'\ u0020',并且让m为索引 字符串中的最后一个字符,其代码大于'\ u0020'。一个 创建新的String对象,表示此子字符串 以索引k处的字符开头并以。结尾的字符串 索引m处的字符,即this.substring(k,m + 1)的结果。
此方法可用于从中修剪空白(如上所述) 字符串的开头和结尾。
返回:此字符串的副本,包含前导和尾随空格 如果没有前导空格或尾随空格,则删除此字符串。
https://docs.oracle.com/javase/6/docs/api/java/lang/String.html#matches(java.lang.String):
public boolean matches(String regex)判断此字符串是否为空 匹配给定的正则表达式。调用这种方法 形式str.matches(正则表达式)产生与结果完全相同的结果 表达
Pattern.matches(regex,str)参数:regex - 正则表达式 要匹配此字符串返回:如果且仅当, 此字符串匹配给定的正则表达式抛出: PatternSyntaxException - 如果正则表达式的语法无效 以来: 1.4参见:模式
答案 1 :(得分:1)
单击“重置”时,可能未显示此例外情况。但是当点击“检查”时按钮 后重置和一些新输入。
错误的原因是,在尝试将其解析为int
之前,您不会测试文本字段中的输入是否为实数。您还可以将输入文本字段的文本设置为空白而不是空字符串""
,这会使输入包含非数字字符并且无法解析。
您应该使用仅过滤整数输入的文本字段see an example here。