打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java开发新手数组方法的应用猜字母游戏

/*

* 猜字母游戏

* 要求:

* 1,系统随机生成5个不同的字母

* 2,用户输入5个不同的字母去匹配

* 3,输出结果包括正确字母个数和正确位置个数

* 4,统计得分,总共500分,错一次扣10分

* 5,输入EXIT退出游戏

* */

/*

* 分析:

* 数据结构:

* 采用数组来存储字母

* 第一步:产生5个不同的字母

* 用方法实现generate()

* 随机产生字母的方法Java没有提供,需要自己设计:

* 可以随机产生数字做数组的下表。

* 第二步:比较两个数组的字母check()

* 判断字母对的个数和位置对的个数

*

* 第三步:main()函数

* 输出结果

* */

package day06;

import java.util.Scanner;

public class Guessing {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner scan = new Scanner(System.in);

System.out.println('游戏开始啦----->ready go......');

char[] chs = generate();

//作弊,提示正确答案

//注意因为'要猜的字母是:'和chs不能写在同一个输出语句中

System.out.print('提示:要猜的字母是:');

System.out.println(chs);//专门打印出数组,Java给出的功能

int count=0;//标记猜错的次数

while(true){//这里创建while循环是为了后面break跳出循环,因为是exit就不需要进入循环了,

//同时猜对了也要跳出,不然就是死循环了还会让你继续猜

System.out.println('写出你猜的字母:');

//然后用户输入字母

String str = scan.next().toUpperCase();//对输入的字母不区分大小写,因为会转化为大写

if(str.equals('EXIT')){

System.out.println('欢迎下次再来!!!');

break;

}

char[] input = str.toCharArray();//转化为数组

//比较

int[] result = check(chs,input);

System.out.println('字母正确个数是:'+result[1]);

System.out.println('位置正确个数是:'+result[0]);

//添加一个得分功能的话上面的代码需要修改

//判断猜对了只要是猜对的位置个数是5就行

if(result[0]==chs.length){

System.out.println('恭喜你猜对了!!!');

int score = chs.length*100-count*10;

System.out.println('你的得分是:'+score);

break;

}

else{

count++;

//System.out.println('你的答案中字母正确个数为:'+result[1]+',位置正确个数为:'+result[0]);

}

}

}

/*

*

* */

public static char[] generate(){//看到不是viod就必须有返回

char[] chs = new char[5];

char[] array = new char[]{'A','B','C','D','E','F','G','H','I','J','K','L','M','N',

'O','P','Q','R','S','T','U','V','W','X','Y','Z'};

//int index = (int)(Math.random()*array.length);产生随机值一定要放在循环体里面,否则的话可能一直产生某一个值不进入赋值

//int index = (int)(Math.random()*array.length);//一共有26个字母

boolean[] flags = new boolean[array.length];//默认值为false,给array每个元素标记

//给chs元素赋值

for(int i=0;i<>

//chs[i]=array[index];//这里如果就这样的话会可能产生相同的字母,不符合要求,代码需要修正,采用标记的方法来修正

/*

* 给array中每个元素标记false,当取到了某个字母时候,对其进行标记true不再访问

* 这里要使用到循环,do……while适合在这里,第一遍是必须要走的

* */

int index;//必须声明

do{

index = (int)(Math.random()*array.length);//一共有26个字母

}while(flags[index]==true);

chs[i]=array[index];

flags[index]=true;

}

return chs;

}

/*

* 比较两个数组,采用数组来获得结果

* 比较获得的结果有两个

* 一个是字母相同数

* 一个是位置相同数

* 所以采用一个长度为2的数组来存储

* */

public static int[] check(char[] chs,char[] input){//看到不是viod就必须有返回

int[] result = new int[2];//默认值result[0]=0,result[1]=0

//result[0]存储位置相同的个数result[1]存储字母相同的个数

//两个数组的每个元素都要比较,从chs的第一个开始逐一跟input的每一个比较,for循环嵌套

for(int i=0;i

for(int j=0;j<>

//开始比较

if(chs[i]==input[j]){//找到相同字母,跳出最里面的循环

result[1]++;

if(i==j){//位置相同

result[0]++;

}

break;

}

}

}

return result;

}

}

程序运行结果演示

程序运行结果演示

程序运行结果演示

程序运行结果演示程序运行结果演示

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java常用类库介绍
科技·Kotlin从入门到精通,基本数据类型
Go 语言系列10:数组
(转)Java程序员必知的8大排序
数组
第八章第三节--初始化数组
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服