#博学谷IT学习技术支持#
目录
一、案例概述
在最近一周的学习中,学习涉及到了一个基础的案例。那便是用GUI做一个猜数字的界面并实现它的功能。这个案例的功能是比较容易实现的,就是搭建一个简易的界面:
利用Random函数去生成一个1-100之间的随机数,并且给“我猜”按钮添加事件监听器去实现猜数字的功能便算是玩成了。案例完成后,我也尝试着运行,没有发现什么问题,可以正常地进行游戏。当我第一次猜对这个数字后,我尝试再次输入该数字,却它的结果还是“猜对了”。
二、问题描述
下面为原来部分代码:
//生成1-100之间的随机数
Random r = new Random();
int number = r.nextInt(100) + 1;
//给我猜按钮添加事件监听器
guess.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//猜的数字不可以为空
//获取文本框的内容 判断
String guessNumber = numberField.getText().trim();
//guessnumber == null
if (guessNumber.equals("")) {
JOptionPane.showMessageDialog(jf,"您输入的内容为空,请重新输入");
return;
}
//将获取的String类型的字符串转换为int类型
int guessnumber = Integer.parseInt(guessNumber);
//把两个数字进行比较,给出提示
if (guessnumber > number) {
JOptionPane.showMessageDialog(jf,"你猜的数字" + guessnumber + "大了");
numberField.setText("");
} else if (guessnumber < number) {
JOptionPane.showMessageDialog(jf,"你猜的数字" + guessnumber + "小了");
numberField.setText("");
} else {
JOptionPane.showMessageDialog(jf,"恭喜你,猜对了");
numberField.setText("");
//再次生成随机数
number = r.nextInt(100) + 1;
}
}
});
由此,我发现它的随机数是每一次程序启动的时候才生成的,我便想改进这个情况。那便是我每次猜对数字之后,便立马又生成一个随机数,即使不重新启动程序,也可以继续进行猜数字游戏。于是我便在判断“猜对了”的情况下又增加了一条语句,但是系统却产生了错误信息。
这是我增加的代码:
//再次生成随机数
number = r.nextInt(100) + 1;
报错情况如图:
在我上网查阅后知道这是因为在匿名内部类中使用了外部类的变量。提示的解决方法便是将外部类的变量用final修饰。可是,如果用final修饰的话,那就相当于一个常量了,无法对它进行赋值操作,那便没有了意义。
三、解决方案
最后,我咨询了我的导师,他给出了一个解决方案。便是将接收随机数这个变量,定义成一个静态成员变量。这样便可以直接在匿名内部类中进行使用了。
static int number;
至于为什么是静态的,因为main()方法便是static修饰的,而在静态方法中调用的成员变量,成员变量也应该是静态的。
这是我学习中遇到的问题和解决方案,发该博客是为了记录遇到的这些情况,如有不足,请指出。