标签:java 猜拳 equals else 案例 result input 控制台 String
此案例的需求如下:
1.系统随机猜拳(石头,剪刀,布)
2.控制台输入 石头,剪刀,布,其中之一
3.对比判断
4.当猜拳赢了,程序提示”你赢了!游戏结束“程序退出
具体的逻辑:
Step1:将系统随机猜拳的逻辑封装
1.1:我们需要一个库来装石头,剪刀,布
String[] ownership = {"石头","剪刀","布"};//将用来对比的石头,剪刀,布存到数组中
1.2
我们虽然不能直接随机出字符串(石头,剪刀,布)
但是我们可以创建一个变量当作下标来随机库的长度的数就得到了一个具体的下标的值,
然后再用数组(库)名[下标变量]确定具体的元素再赋值给最终返回值的变量,
就实现了随机石头,剪刀,布其中之一
// 随机一个ownership数组的下标
int index = (int)(Math.random()*ownership.length);
// 去除下标对应的元素赋值给最终返回值的变量
random = ownership[index];
return random;
Step2:将对比的逻辑封装
因为我们最终要输出的结果是一个字符串类型的值,
所以我们的返回值类型是String,其次我们需要拿两个参数进行判断,所以参数是两个,
其次因为我们是拿两个字符串对比,则参数的类型就是String了,
两个参数分别是系统随机生成的字符串(computers方法),控制台输入的字符串,
// 将猜拳对比的逻辑封装
static String comparison(String computers,String input){
1.对比的逻辑:
首先假设系统出的是石头,
假设控制台输入的是石头则平局
假设控制台输入的是剪刀则失败
假设控制台输入的是布则胜利
假设系统出的是布,
假设控制台输入的是石头则失败
假设控制台输入的是剪刀则胜利
假设控制台输入的是布则平局
假设系统出的是剪刀,
假设控制台输入的是石头则胜利
假设控制台输入的是剪刀则平局
假设控制台输入的是布则失败
具体实现:
static String comparison(String random,String input){
String result = "";//最终返回值的变量
// 对比逻辑
if ("石头".equals(random)){//假设系统出石头
if ("石头".equals(input)){//假设控制台输入的是石头
result = "平局";
}else if ("剪刀".equals(input)){//假设控制台输入的是剪刀
result = "失败";
}else if ("布".equals(input)){//假设控制台输入的是布
result = "胜利";
}
}
if ("剪刀".equals(random)){//假设系统出剪刀
if ("石头".equals(input)){//假设控制台输入的是石头
result = "胜利";
}else if ("剪刀".equals(input)){//假设控制台输入的是剪刀
result = "平局";
}else if ("布".equals(input)){//假设控制台输入的是布
result = "失败";
}
}
if ("布".equals(random)){//假设系统出布
if ("石头".equals(input)){//假设控制台输入的是石头
result = "失败";
}else if ("剪刀".equals(input)){//假设控制台输入的是剪刀
result = "胜利";
}else if ("布".equals(input)){//假设控制台输入的是布
result = "平局";
}
}
return result;
}
}
这样捋的话思路比较清晰,但是代码量较大
仔细观察我们发现平局的情况下两个参数的字符串是一样的所以可以将它优化成一组if分支
其次当我们我们用排除法的逻辑假设完系统输入的两种可能后那么第三种可能就不需要再去假设了,
因为当前两种假设都不成立时,
那么就肯定是第三种可能性了所以在第二个假设的后面省略if分支的判断直接else执行第三种的判断
当然在判断input字符串的执行逻辑中也可以进行同样逻辑的优化
具体实现:
// 将对比逻辑封装
static String comparison(int random,int input){
String result = null;//初始化最终返回值
// 对比逻辑
if (random==input){//若相同
result = "平局";
}else if (random==1){//若系统随机的是1
if (input==2){//若控制台输入的是2
result = "胜利";
}else{//否则
result = "失败";
}
}else if (random==2) {//若系统随机的是2
if (random==3){//若控制台输入的是3
result = "胜利";
}else{
result = "失败";
}
}else{
if (input==1){//若控制台输入的是1
result = "胜利";
}else{
result = "失败";
}
}
return result;
}
然后在main方法中去整理,然后将需求按主次一次套入就好了
最后进行了一系列的逻辑优化后的代码如下:
package game;
import java.util.Scanner;
/**
* 用java实现猜拳案例WayOne
*/
public class Conjecture {
// 将系统随机出拳的逻辑封装
static String computers(){
String random = "";//最终返回值的变量
String[] ownership = {"石头","剪刀","布"};//列举出系统可能出现的对比数据
// 随机一个ownership数组的下标
int index = (int)(Math.random()*ownership.length);
// 去除下标对应的元素赋值给最终返回值的变量
random = ownership[index];
return random;
}
// 将猜拳对比的逻辑封装
static String comparison(String computers,String input){
String result = "";//最终返回值的变量
// 对比逻辑
if (input.equals(computers)){//input与computers是否一致
result = "平局";
}else if ("石头".equals(computers)){//当系统输出的是石头时
if ("剪刀".equals(input)){//当控制台输入剪刀时
result = "失败";
}else{//否则
result = "胜利";
}
}else if ("布".equals(computers)){//当系统输出的是布的时候
if ("石头".equals(input)){//判断控制台输入的是否是石头
result = "失败";
}else{//否则
result = "胜利";
}
}else{//否则
if ("布".equals(input)){//判断控制台输入的是否是布
result = "失败";
}else{//否则
result = "胜利";
}
}
return result;
}
// 主入口中整理,执行封装的逻辑
public static void main(String[] args) {
// 控制台输入
Scanner sc=new Scanner(System.in);
// 需求One:若没有猜对则继续猜,直到猜对为止
while(true){//自造死循环
// 调用computers方法
String random = computers();
// 作弊一下
System.out.println(random);
// 友好提示
System.out.println("猜吧");
// 接收控制台输入
String input = sc.next();
// 需求:当输入的是EXIT的时候程序终止且退出
if ("EXIT".equals(input)){
System.out.println("程序退出");
}else {
// 调用comparison方法对比
String result = comparison(random,input);
// 需求:猜对则游戏退出
if ("胜利".equals(result)) {
// 输出对比结果
System.out.println(result);
break;
} else {
// 输出对比结果
System.out.println(result);
}
}
}
}
}
总结:
此逻辑主要用到了if--else分支和equals方法(字符串比较),
当我们把if--else的执行逻辑搞透彻后此案例的逻辑就会很清晰了
标签:java,猜拳,equals,else,案例,result,input,控制台,String 来源: https://blog.csdn.net/qq_54177999/article/details/114259320
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。