记录今天遇到的一个问题,解决一个需求的同时,代码明明看着逻辑没有问题,但是会出现错误,一直显示错误的提示,如下面这段代码,没有报错,没有异常但是呢,运行出来就是判断不对。
那么是什么原因呢?
//猜数游戏,接收一个数组然后限猜五次,若是猜的数在数组中那么就提示猜中了,否则就输出猜错了
public static void guess(){
int[] num =new int[]{8,4,2,1,23,24,12};
Scanner scanner=new Scanner(System.in);
for (int i = 0; i <5 ; i++) {
System.out.println("请输入第"+(i+1)+"次猜测的数:");
int target= scanner.nextInt();
if (Arrays.asList(num).contains(target)){
System.out.println("恭喜您猜对了");
}else{
System.out.println("不好意思您猜错了剩余"+(4-i)+"");
}
}
}
出现这种问题,原因是:
在Java中,"Arrays.asList()
方法将数组转换为List时,只适用于引用类型的数组"。对于基本类型的数组,如int[]
,它将直接将整个数组作为单个元素添加到List中,而不是将数组的元素作为单独的元素添加到List中。
上面这段代码中,我使用Arrays.asList(num)
,其中num
是一个int[]
类型的数组。因此,Arrays.asList()
将整个num
数组作为单个元素添加到List中。然后使用contains()
方法检查是否存在目标数字,这将导致始终返回false
,因为整个num
数组本身并不等于猜的数字。
解决这个问题的一种方法思路是将int[]
数组转换为Integer[]
数组,然后再使用Arrays.asList()
方法。这样可以将每个数组元素作为单独的元素添加到List中。
以下是修改后的代码:
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class GuessingGame {
public static void guess() {
Integer[] num = {8, 4, 2, 1, 23, 24, 12};
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 5; i++) {
System.out.println("请输入第" + (i + 1) + "次猜测的数:");
int target = scanner.nextInt();
if (Arrays.asList(num).contains(target)) {
System.out.println("恭喜您猜对了");
return; // 猜对后直接返回,结束游戏
} else {
System.out.println("不好意思您猜错了剩余" + (4 - i) + "次");
}
}
System.out.println("很遗憾,您没有猜对");
}
public static void main(String[] args) {
guess();
}
}
修改后的代码中,我将int[]
类型的num
数组改为Integer[]
类型,并对其进行了初始化。然后再使用Arrays.asList()
方法将其转换为List。
并且还添加了一个return
语句,当猜对数字后,直接返回并结束游戏。在循环中使用return
语句可以避免继续执行后续的循环次数。
进行测试验证是否满足需求:
结尾语:记录于2023年7月18日13点15分,以上仅为个人在学习的过程中遇到的问题,还有自己记录的解决办法,有错误欢迎指出,感谢!