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
相关产品推荐
相关产品推荐

