You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

彩票模拟程序中用户输入的一维int数组为何自动排序?

解决彩票系统数组显示原始顺序的问题

嗨,Nora!我来帮你搞定这个课堂作业的小问题~

问题核心

你遇到的情况是:用户输入的彩票号码数组,在后续显示时被改成了从小到大的排序,但你希望保留用户输入的原始顺序,同时还得遵守作业要求——不能把中奖判断逻辑从指定方法移到main里。

大概率的原因

问题几乎肯定出在你的指定中奖判断方法里:你直接对用户输入的原始数组执行了排序操作(比如用Arrays.sort()或者手动排序)。因为排序方法是会直接修改原数组的,所以当你之后再去显示这个数组时,它已经是排好序的状态了。

解决方案:操作数组副本而非原始数组

既然不能移动方法逻辑,那我们只需要在指定方法里,先创建用户输入数组的副本,然后对副本进行排序和中奖比对操作,这样原始数组就不会被修改,后续显示的时候就能保持用户输入的原始顺序啦。

举个代码示例:
假设你原来的中奖判断方法是这样的(会修改原始数组):

public static boolean checkWin(int[] userNumbers, int[] lotteryNumbers) {
    // 直接排序原始数组,导致原数组被修改
    Arrays.sort(userNumbers);
    Arrays.sort(lotteryNumbers);
    return Arrays.equals(userNumbers, lotteryNumbers);
}

修改成这样(操作副本,保留原始数组):

import java.util.Arrays;

public static boolean checkWin(int[] userNumbers, int[] lotteryNumbers) {
    // 创建用户输入数组的副本,长度和原数组一致
    int[] userCopy = Arrays.copyOf(userNumbers, userNumbers.length);
    // 同样创建开奖号码数组的副本
    int[] lotteryCopy = Arrays.copyOf(lotteryNumbers, lotteryNumbers.length);
    
    // 对副本进行排序操作
    Arrays.sort(userCopy);
    Arrays.sort(lotteryCopy);
    
    // 用副本比对中奖结果
    return Arrays.equals(userCopy, lotteryCopy);
}

如果是你手动实现的排序逻辑(不是用Arrays.sort()),也要记得先把原始数组的元素复制到新数组,再对新数组进行排序,绝对不要直接操作原始输入数组。

这样修改后,你在main方法里显示用户输入的号码时,直接遍历原始的userNumbers数组,就能输出用户当初输入的顺序啦~

内容的提问来源于stack exchange,提问作者Nora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:35:44