java方法-----猜字母案例

xiaoxiao2021-02-28  87

第二篇文章 之前通过冒泡排序已经无意间涉及了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; } }

过两天会开始写面向对象编程的案例“俄罗斯方块”,欢迎私信、评论。


互勉

转载请注明原文地址: https://www.6miu.com/read-39700.html

最新回复(0)