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

Java课程项目:如何从ArrayList中随机选取元素?

解决随机选取ArrayList中元素的问题

嘿,别担心代码杂乱,刚开始做项目都这样😉 我来帮你搞定从电影列表里随机选一个的问题!

先说说你现有代码里的小问题

  • 开头的String s = scan.nextLine();会直接跳过文件的第一行,导致这行的电影没被加入movieList,这是个容易忽略的小疏漏
  • 第二个while (scan.hasNextLine())循环根本不会执行——因为第一个循环已经把Scanner的所有内容读完了,指针到了文件末尾,所以里面的numOfMovies和randomMovie计算完全没生效
  • 其实不用自己手动计数numOfMovies,ArrayList自带的size()方法就能直接拿到列表里的元素总数,省心又准确

修正方案:随机选取元素的正确姿势

我们只需要在把所有电影加载到movieList后,生成一个合法的随机索引(范围是0到movieList.size()-1,因为ArrayList的索引从0开始),然后用这个索引取出对应的电影就行。这里有两种常用方法:

方法1:使用Math.random()

package moviemain1;

import java.io.*;
import java.util.*;

public class MovieMain1 {
    public static void main(String[] args) throws IOException {
        Scanner scan = new Scanner(new File("movies.txt"));
        ArrayList<String> movieList = new ArrayList<String>();

        // 加载所有电影到列表(去掉之前跳过第一行的冗余代码)
        while (scan.hasNextLine()) {
            movieList.add(scan.nextLine());
        }

        // 先判断列表是否为空,避免空指针或除以0错误
        if (movieList.isEmpty()) {
            System.out.println("电影文件是空的,请检查内容!");
            return;
        }

        // 生成随机索引:Math.random()返回0.0到1.0之间的数,乘以列表长度后转成int
        int randomIndex = (int) (Math.random() * movieList.size());
        // 通过索引获取随机电影
        String randomMovie = movieList.get(randomIndex);

        System.out.println("随机选中的电影:" + randomMovie);
        // 保留打印整个列表的代码,方便验证所有电影是否正确加载
        System.out.println("所有电影列表:" + movieList);
    }
}

方法2:使用Random类(更推荐,可读性更好)

Random类是Java专门用于生成随机数的工具,比直接用Math.random()更直观,也更灵活:

package moviemain1;

import java.io.*;
import java.util.*;

public class MovieMain1 {
    public static void main(String[] args) throws IOException {
        Scanner scan = new Scanner(new File("movies.txt"));
        ArrayList<String> movieList = new ArrayList<String>();
        Random random = new Random(); // 创建Random实例

        while (scan.hasNextLine()) {
            movieList.add(scan.nextLine());
        }

        if (movieList.isEmpty()) {
            System.out.println("电影文件是空的,请检查内容!");
            return;
        }

        // 直接生成0到size-1之间的随机整数,不用自己做范围转换
        int randomIndex = random.nextInt(movieList.size());
        String randomMovie = movieList.get(randomIndex);

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:06:19