📄 numbermidlet.java
字号:
import java.util.Random;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class NumberMidlet extends MIDlet implements CommandListener {
public Form m_Form; //对话框
public TextField m_TFInput; //文本编辑框
public StringItem m_strItem; //文本显示组件
public int m_aNum[]; //存储目标数
public int m_nTimes = 0; //输入的次数
public boolean m_bEndGame = false; //游戏结束的标志
private Command OKCommand; //高级指令
public NumberMidlet() {
super();
m_Form = new Form("猜数字");
//设置m_TFInput组件,使其只能输入4位数字
m_TFInput = new TextField("输入","", 4, TextField.NUMERIC );
m_strItem = new StringItem("反馈","0B0A" );
m_Form.append(m_TFInput);
m_Form.append(m_strItem);
//产生目标数
m_aNum = new int[4];
InitNum();
//创建指令,并设置指令的监听器
OKCommand = new Command( "输入", Command.OK, 0);
m_Form.addCommand( OKCommand );
m_Form.setCommandListener(this);
}
public void InitNum(){ //产生随机的目标数
Random random = new Random();
int k = random.nextInt();
int m = 0;
for( int n = 0; n < 4; n ++ ){
k = random.nextInt();
m_aNum[n] = Math.abs(k % 10);
//for循环语句,确保四个数位上的数字无重复
for( m = 0; m < n; m ++ ){
//若与前面的数字重复,则用加1的办法保证不重复
if( m_aNum[n] == m_aNum[m] )
m_aNum[n] ++;
//若加1后大于9则回到0
if( m_aNum[n] > 9 )
m_aNum[n] = 0;
}
}
}
protected void startApp() throws MIDletStateChangeException {
//设置当前屏幕显示的对象
Display.getDisplay(this).setCurrent(m_Form);
}
protected void pauseApp() {
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
public void commandAction(Command arg0, Displayable arg1) {
if( m_bEndGame )
return;
if (arg0 == OKCommand){ //指令被触发
char cNum[] = new char[4];
m_TFInput.getChars(cNum);
if( !CheckNumber( cNum ) )
{//如果输入数不合法
m_strItem.setText(null);
m_TFInput.setChars(null, 0, 0);
m_strItem.setText("非法数字");
return;
}
FeedBack(cNum); //反馈信息
}
}
public boolean CheckNumber( char cNum[] ){ //检测数据是否合法
if( cNum.length != 4 )
return false;
for( int i = 0; i < 4; i ++ ){
for( int j = 0; j < i; j ++ ){
//有两个数字相同了,确定是非法输入
if( cNum[i] == cNum[j] ){
return false;
}
}
}
return true;
}
public void FeedBack(char cNum[]){ //根据输入数反馈信息
if( cNum.length != 4 )
return;
int nB = 0; //记录B的个数,即m的值
int nA = 0; //记录A的个数,即n的值
for( int i = 0; i < 4; i ++ ){
for( int j = 0; j < 4; j ++ ){
//cNum[i]是字符,需先转换成对应的数字,再与m_aNum[j]进行比较
if( (int)(cNum[i] - '0') == m_aNum[j] ){
if( i == j )
nA ++; //如果位置也相同,则m的值加1
else
nB ++; //如果位置不相同,则n的值加1
}
}
}
if( nA == 4 ){ //猜数成功
m_strItem.setText(null);
m_strItem.setText("成功");
m_bEndGame = true;
return;
}
else
m_nTimes ++;
if( m_nTimes > 5 ){ //猜数失败
m_strItem.setText(null);
m_strItem.setText("失败");
m_bEndGame = true;
return;
}
//输出反馈信息
StringBuffer temp = new StringBuffer();
temp.append(nB);
temp.append("B");
temp.append(nA);
temp.append("A");
m_strItem.setText(null);
m_strItem.setText(temp.toString());
m_TFInput.setChars(null, 0, 0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -