第二篇文章
之前通过冒泡排序已经无意间涉及了for循环、数组、数组排序和方法多个java 的基础层次,这篇文章通过“猜字母”在深部了解一下java的方法。
游戏规则:系统随机生成五个不同字母,然后用户输入字母(不区分大小写),会根据对比结果,输出对了几个字母和位置对了几个。
总代码=main+check+generate
1. 用generate方法随机生成字母数组(chs数组)
flag[]数组是用来判断letters[]中字母是否被选中过,目的是为了选出五个不同的字母。
//生成随机字母
public static char[] generate() {
char[] chs=new char[5];
boolean[] flag=new boolean[26];
int x=0;
char[] letters={ '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' };
for(int i=0;i<chs.length;i++){
do{
x=(int)(Math.random()*letters.length);
}while(flag[x]);
chs[i]=letters[x];
flag[x]=true;
}
return chs;
}
2. 输入字母(input数组)与chs数组用check方法比较
双重for循环判断,首先通过数组两两遍历判断字母是否有相同的,然后通过数组下标判断位置是否相同。
//比对
public static int[] Check(char chs[],char input[]) {
int[] result=new int[2];
for(int i=0;i<chs.length;i++){
for(int j=0;j<input.length;j++){
if(chs[i]==input[j]){
result[1]++;
if(i==j) result[0]++;
break;
}
}
}
return result;
}
3. main方法中实现多次输入、比对
在while中反复执行输入,check和结果输出,
ps:exit是退出游戏,其中有作弊代码,有标注
public static void main(String[] args) {
int count=0;
int score=500;
Scanner scan=new Scanner(System.in);
int[] result=new int[2];
char[] chs=generate();
char[] input=new char[5];
//作弊代码,会把随机生成的数组输出
System.out.println(chs);
while(true){
String str=scan.next().toUpperCase();
if(str.equals("EXIT")){
System.out.println("欢迎下次再来");
break;
}
input=str.toCharArray();
result=Check(chs, input);
if(result[0]==chs.length){
System.out.println("恭喜你答对了");
break;
}
else
System.out.println("猜对"+result[1]+"字母"+"猜对"+result[0]+"个位置");
}
}
4.总代码
ps:exit是退出游戏,其中有作弊代码,有标注
import java.util.Scanner;
public class Guessing {
public static void main(String[] args) {
int count=0;
int score=500;
Scanner scan=new Scanner(System.in);
int[] result=new int[2];
char[] chs=generate();
char[] input=new char[5];
System.out.println(chs);
while(true){
String str=scan.next().toUpperCase();
if(str.equals("EXIT")){
System.out.println("欢迎下次再来");
break;
}
input=str.toCharArray();
result=Check(chs, input);
if(result[0]==chs.length){
System.out.println("恭喜你答对了");
break;
}
else
System.out.println("猜对"+result[1]+"字母"+"猜对"+result[0]+"个位置");
}
}
public static char[] generate() {
char[] chs=new char[5];
boolean[] flag=new boolean[26];
int x=0;
char[] letters={ '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' };
for(int i=0;i<chs.length;i++){
do{
x=(int)(Math.random()*letters.length);
}while(flag[x]);
chs[i]=letters[x];
flag[x]=true;
}
return chs;
}
public static int[] Check(char chs[],char input[]) {
int[] result=new int[2];
for(int i=0;i<chs.length;i++){
for(int j=0;j<input.length;j++){
if(chs[i]==input[j]){
result[1]++;
if(i==j) result[0]++;
break;
}
}
}
return result;
}
}
过两天会开始写面向对象编程的案例“俄罗斯方块”,欢迎私信、评论。
互勉