如何使用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
相关产品推荐
相关产品推荐

