提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?
输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3。
示例 1:
输入:guess = [1,2,3], answer = [1,2,3] 输出:3 解释:小A 每次都猜对了。
示例 2:
输入:guess = [2,2,3], answer = [3,2,1] 输出:1 解释:小A 只猜对了第二次。
限制:
guess的长度 = 3 answer的长度 = 3 guess的元素取值为 {1, 2, 3} 之一。 answer的元素取值为 {1, 2, 3} 之一。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/guess-numbers
这个题其实蛮简单的,只不过本人是个初学者。
首先依次输入两组数,而后写一个计算有几个相同的数、第几个相同的数的方法,在主方法内引用。
代码如下(示例):(第一遍自己写的,后来看了别人是十行就搞定了,我这个菜鸡写了快100,难受)
package SuanFa01; import java.util.Scanner; public class Caishuzi { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] str; String[] str1; boolean flag = false; boolean flag1 = false; while (true){ System.out.println("请键盘录入第一组三个数(1-3),中间以空格分隔"); str = sc.nextLine().split(" "); if(str.length==3){ int b = 0; for (int i = 0; i < str.length;i++ ) { //红色部分有点乱哈,大致意思就是,如果全部通过,就是输入的字符串合格,就返回true,反之就是false。 int a = Integer.parseInt(str[i]); if (a >= 1 & a <= 3) { b++; }else{ System.out.println("您输入的数字范围不对,请重新输入"); } } if(b==3){ flag = true; } }else{ System.out.println("您输入的数字个数不对,请重新输入"); } //这蓝色部分和红色字体一样,是第二个数组 System.out.println("请键盘录入第二组三个数(1-3),中间以空格分隔"); str1 = sc.nextLine().split(" "); if(str1.length==3){ int b = 0; for (int i = 0; i < str1.length;i++ ) { int a = Integer.parseInt(str1[i]); if (a >= 1 & a <= 3) { b++; }else{ System.out.println("您输入的数字范围不对,请重新输入"); } } if(b==3){ flag1 = true; } }else{ System.out.println("您输入的数字个数不对,请重新输入"); } if(flag&flag1){ duiBi(str, str1); } } } //下面红色字体是一个对比的方法,就是比较两个数组对应的数字是否相同,有几个相同 public static void duiBi(String[] A, String[] B) { int a = 0; for (int i = 0; i < A.length; i++) { int b = Integer.parseInt(A[i]);//因为之前输入的是字符串,这边是整型数组,所以要转换一下 int c = Integer.parseInt(B[i]); if (b==c) { a++; } } switch (a) { case 3: System.out.println("三次全部答对"); break; case 2: System.out.println("二次答对"); break; case 1: System.out.println("一次答对"); break; case 0: System.out.println("全部错误"); break; } //为什么A[i].equalsB[i]不对??? //之前不知道为什么A[i]==B[i]为什么不能用做判断,后来发现这俩是字符串,要用equals int d = 0; for (int i = 0; i < A.length; i++) { int b = Integer.parseInt(A[i]); int c = Integer.parseInt(B[i]); if (b==c) { d++; System.out.println("第" + d + "个猜对了"); } } } }代码如下(示例):(这个和第一遍的原理大致相同,只不过把一些没用的去掉了,并且借鉴了别人的一些方法)
package SuanFa01; import java.util.Scanner; public class Caishuzi01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { System.out.println("请键盘录入第一组三个数(1-3),中间以空格分隔"); String[] str = sc.nextLine().split(" "); System.out.println("请键盘录入第二组三个数(1-3),中间以空格分隔"); String[] str1 = sc.nextLine().split(" "); game(zhuanHuan(str),zhuanHuan(str1)); } } //还是因为字符串和数组的转换问题,下面红色代码 public static int[] zhuanHuan(String[] A) { int a[] = new int[A.length]; for (int i = 0; i <A.length ; i++) { a[i] = Integer.parseInt(A[i]); } return a; } public static int game(int[] guess,int[] answer){ int r = 0; for (int i = 0; i < 3; i++) { if(guess[i] == answer[i]) { r++; System.out.println("第"+(i+1)+"个数相同"); } } System.out.println("共"+r+"个数相同"); return r; } }代码如下(示例):后来想想,为什么非要用字符串输入呢,虽然输入省劲了,但是后面转换更费劲了,还不如直接整型数组输入,两下搞完
package SuanFa01; import java.util.Scanner; public class Caishuzi02 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] a = new int[3]; int[] b = new int[3]; System.out.println("请输入第一组的三个数字"); for (int i = 0; i < 3; i++) { System.out.println("请输入第"+(i+1)+"个数字"); a[i]=sc.nextInt(); } System.out.println("请输入第二组的三个数字"); for (int i = 0; i < 3; i++) { System.out.println("请输入第"+(i+1)+"个数字"); b[i]=sc.nextInt(); } game(a, b); } public static int game(int[] guess,int[] answer){ int r = 0; for (int i = 0; i < 3; i++) { if(guess[i] == answer[i]) { r++; System.out.println("第"+(i+1)+"个数相同"); } } System.out.println("共"+r+"个数相同"); return r; } }小白初学,争取每日一道算法题,一位前辈说,算法题还是得自己多做几遍,做完参考下别人的,慢慢积累。