困难解决:明明逻辑没有错,但是报错,重点在Arrays.asList()方法的使用限制

 记录今天遇到的一个问题,解决一个需求的同时,代码明明看着逻辑没有问题,但是会出现错误,一直显示错误的提示,如下面这段代码,没有报错,没有异常但是呢,运行出来就是判断不对。

 那么是什么原因呢?

//猜数游戏,接收一个数组然后限猜五次,若是猜的数在数组中那么就提示猜中了,否则就输出猜错了
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分,以上仅为个人在学习的过程中遇到的问题,还有自己记录的解决办法,有错误欢迎指出,感谢!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stevedash

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值