文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 前言
- 一、关于这个案例的突发奇想
- 二、使用步骤
- 1.引入库
- 2.读入数据以及数据处理
- 总结
前言
Java刚刚学完数组,突发奇想记录一下自己的学习过程于是有了这个系列
以下是本篇文章正文内容,下面案例可供参考(屎山代码,哈哈哈有bug请多包涵)
一、关于这个案例的突发奇想学了死循环,不久,又稍微学了下数组手有点欠,刚好老师讲了一个猜数字游戏于是就想稍微完善下,全篇没什么技巧,全是感情(qaq)
二、使用步骤 1.引入库代码如下(示例):
import java.util.Random; import java.util.Scanner;2.读入数据以及数据处理
代码如下(示例):
public class ArrCaiShuZi {
public static void main(String[] args) {
//游戏规则如下 后台随机生成1-20 中的五个数 初始给出四次猜测的机会 每对一次机会增加2次 有一次提示最近的数字与之前一个你猜测的数字距离的机会
//未猜中提示“未猜中,请继续努力” 猜中提示“你离成功又近了一步” 次数用完未猜中 提示"游戏失败",次数用完前猜中提示“你真厉害”
Random r = new Random();
Scanner sc = new Scanner(System.in);
int[] x = new int[5];
int[] xed = new int[5];
int flag = 0;//0为提示未使用 flag变为一代表使用一次提示功能
int count = 0;//已使用次数
int chance = 4;//可使用次数
int juli = 0;//提示中需要使用的距离
int input = 0;//输入的数
int leftNumber = 0;//上一个输入的数
int p = 0; //记录猜对的个数
int flag2 = 0;//五个flag2代表你猜的数真的不在这五个数里的任何一个数
for (int i = 0; i < 5; i++) { //产生随机数组
x[i] = r.nextInt(1,21);
for (int j = 0; j < 5; j++) { //防止重复
if (i == j) {
continue;
}
if (x[i] == x[j]) {
x[i] = r.nextInt();
i -= 1;
}
}
}
System.out.println("游戏开始");
while (true) {
leftNumber = input;
int flag1 = 0; //检测使用提示前输入的数字是是正确答案
count++;
if (count > chance) {
System.out.println("游戏失败");
break;
}
if (flag == 0) {
System.out.println("请输入一个整数并回车进行猜测");
System.out.println("或输入520回车使用一次提示机会");
input = sc.nextInt();
if ( input != 520 & input > 20 || input < 1) //判断是否超出范围
{
System.out.println("输入的数超出范围,请重新输入");
continue;
}
for (int i = 0; i < 5; i++) {
if (input == x[i]) {
for (int k = 0; k < 5; k++) {
if (i == xed[k] + 10){
flag2 = 1;
}
}
if (flag2 == 1) { //如果这个数已经被猜到
System.out.println("该数已经被猜出来啦");
count -= 1;
flag2 = 0;
break;
}
System.out.println("你离成功又近了一步"); //猜测正确
xed[p] = i - 10;
p++;
chance += 2;
break;
} else if(input == 520){ //这个循环是提示功能的实现
if (count < 2) { //防止leftMumber为空出现bug
System.out.println("请在至少第二次猜测后使用提示");
count -= 1;
break;
}
juli = x[0] - leftNumber;
for (int j = 0; j < 5; j++) { //计算距离
if (juli > Math.abs(x[j] - leftNumber)) {
juli = Math.abs(x[j] - leftNumber);
}
}
flag += 1;
if (juli == 0) {
System.out.println("请在猜错的时候使用");
flag -=1;
break;
}
System.out.println("离上一个数最近的数距离为" + juli);
count -= 1;
break;
}else {
flag1++;
if (flag1 == 5) {
System.out.println("未猜中,请继续努力");
break;
}
}
}
}else {
System.out.println("请输入一个整数并回车进行猜测");
input = sc.nextInt();
if ( input != 520 & input > 20 || input < 1) //判断是否超出范围
{
System.out.println("输入的数超出范围,请重新输入");
continue;
}
for (int i = 0; i < 5; i++) {
if (input == x[i]) {
for (int k = 0; k < 5; k++) {
if (i == xed[k] + 10){
flag2 = 1;
}
}
if (flag2 == 1) { //如果这个数已经被猜到
System.out.println("该数已经被猜出来啦");
count -= 1;
flag2 = 0;
break;
}
System.out.println("你离成功又近了一步"); //猜测正确
xed[p] = i - 10;
p++;
chance += 2;
break;
} else if(input == 520){ //这个循环是判断提示是否被使用
System.out.println("已经没有提示的次数了");
count -= 1;
break;
} else {
flag1++;
if (flag1 == 5) {
System.out.println("未猜中,请继续努力");
break;
}
}
}
}
if (p == 5) { //胜利条件
System.out.println("游戏结束你真棒");
break;
}
}
}
}
总结
是关于数组访问和死循环的一个还行的学习案例,虽然我做得稀烂的,哈哈哈哈
就这样吧,下次再见



