目的:
通过学习写一个猜数字的小游戏,学习使用Java中的类,数组,方法的定义和调用。
游戏过程:
程序运行起来先随机产生4个0-9的不重复数字从小到大排序好,但是不显示出来。接着用户开始猜数字,从终端输入4个0-9的从小到大排好的数。然后用户会接收到相应提示,如果输入的数与产生的随机数相同,且排的位置也相同,则提示A;如果输入的数与与产生的随机数相同,但排的位置不同,则提示B;用户根据提示继续猜,直到猜测正确。
运行结果
猜数字游戏2.gif
猜数字游戏2.gif
程序过程
定义一个类GuessNumber,在这个类里面写一个main方法作为程序入口
class GuessNumber{
public static void main(String[] args){
}
}
分别定义一个IE数组保存随机产生的数和用户输入的数
//保存原始数字
int[] org = new int[4];
//保存用户猜测的数字
int[] guess = new int[4];
产生四个随机数并保存在数组中
Random random = new Random();
for (int i = 0;i < 4;i++){
//产生一个随机数
int temp = random.nextInt(10);
//判断是否存在
boolean result = contains(org,temp);
if (result){
//确保i对应的位置能够得到一个不重复的数字
i--;
}else {
org[i] = temp;
}
}
对数组中的数字进行排序
Arrays.sort(org);
接下来开始游戏。
因为要多次游戏,使用一个while循环。然后定义一个Scanner用于输入。
//定义一个Scanner对象
Scanner scanner = new Scanner(System.in);
while (true){
System.out.print("请输入猜测的数字:");
for (int i = 0; i < 4; i++) {
guess[i] = scanner.nextInt();
}
}
然后判断用户的输入,仍在while循环中。
定义一个变量记录提示的A和B的个数,在while循环开始处定义,这样每次循环结束,countA和countB归0,下一次猜数时重新开始计数。
while (true){
int countA = 0;
int countB = 0;
//判断与用户输入
//1.判断是否存在
for (int i = 0; i < 4; i++) {
boolean result = contains(guess, org[i]);
if (true) {
//数字存在
//2.判断位置是否相同
int index = indexOf(guess,org[i]);
if (index == i) {
//数字和位置都相同
countA++;
} else if (index != -1) {
countB++;
}
}
}
其中,contains()是自己写的方法用于判断猜测的数字是否在保存产生的随机数的数组里。
//自己写一个方法去实现 判断某个数组里面是否包含某个值
public static boolean contains(int[] val,int obj){
for (int i = 0; i < val.length; i++) {
if (obj == val[i]){
//重复了
return true;
}
}
return false;
}
在数组里面找某个对象的值,判断位置是否相同,方法为indexOf().
/**
* 在一个数组里面查找某个对象的索引值
* @param val 数组
* @param obj 查找的对象
* @return 索引值
*/
public static int indexOf(int[] val, int obj){
for (int i = 0; i < val.length; i++) {
if (val[i] == obj){
return i;
}
}
return -1;
}
最后,当countA为4时,用户猜测正确。
if (countA == 4) {
System.out.println("恭喜答对!!");
break;
} else {
System.out.println(countA+"A"+countB+"B");
}
总结
刚开始写java程序,会觉得很困难,因为不熟悉,需要反复的练习,才会慢慢写出感觉,体会到面向对象的思想。本程序的难点在于判断与用户输入中,怎样判断两数字的位置是否相同,数组中是否包含某一个数,需要自己写一个方法进行判断。