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

如何使用Scanner从文件填充数组并随机选取元素?为何始终选中Aladdin?

解决Java中从电影数组随机选取总是选中同一部的问题

首先咱们先排查你代码里大概率存在的问题:
你初始化了一个空数组String[] movieList = {};,但数组长度是固定的,如果后续读取电影时没有正确扩容或收集元素,很可能最后数组里只保留了最后一个读取的电影(也就是Aladdin),导致每次随机选只能拿到它。当然也不排除随机数生成逻辑的问题,但前者的概率更高。

正确的实现思路

推荐先用ArrayList来收集文件里的电影(它的长度可以动态调整,比固定长度数组更适合读取未知数量的元素),再从列表里随机选取元素,这样能避免数组长度限制带来的元素丢失问题。

完整代码示例

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class RandomMoviePicker {
    public static void main(String[] args) throws FileNotFoundException {
        // 用ArrayList动态存储电影,规避固定数组的长度限制
        List<String> movieList = new ArrayList<>();
        File file = new File("xxx\\listofmovies.txt");
        Scanner fileScan = new Scanner(file);

        // 逐行读取文件中的电影,同时处理空行和多余空格
        while (fileScan.hasNextLine()) {
            String movie = fileScan.nextLine().trim();
            if (!movie.isEmpty()) {
                movieList.add(movie);
            }
        }
        fileScan.close(); // 记得关闭资源

        // 先检查是否读取到有效电影
        if (movieList.isEmpty()) {
            System.out.println("未读取到任何电影,请检查文件内容!");
            return;
        }

        // 随机选取一部电影
        Random random = new Random();
        int randomIndex = random.nextInt(movieList.size());
        String pickedMovie = movieList.get(randomIndex);

        System.out.println("随机选中的电影是:" + pickedMovie);
    }
}

关键注意事项

  • 放弃固定长度数组:因为你无法提前知道文件里的电影数量,ArrayList可以动态扩容,能确保所有电影都被正确存储。
  • 规范读取文件:用while (fileScan.hasNextLine())循环逐行读取,同时通过trim()和空值判断,避免把空行或无效内容加入列表。
  • 正确生成随机索引:random.nextInt(movieList.size())会生成0到movieList.size()-1之间的随机整数,对应列表的有效索引,保证每次选取的随机性。

如果坚持使用数组

如果你一定要用数组存储,可以先把电影读到ArrayList里,再转成数组:

String[] movieArray = movieList.toArray(new String[0]);
// 然后执行随机选取逻辑
int randomIndex = random.nextInt(movieArray.length);
String pickedMovie = movieArray[randomIndex];

这样就能解决每次都选中Aladdin的问题了,核心是确保数组/列表里确实存储了所有电影,而不是只有最后一部。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:22:48