感谢stackoverflow社区,我的problem已修复。但是,我现在有了一个新问题。我有一些代码从文件读取一个随机行,显示它,现在从arraylist中删除随机行,以便它不会再次显示。但现在,显示的线条不是随机的。我有一个包含40行的文件,现在它只按顺序显示最后20行。这是更新后的代码:
try {
Random random = new Random();
int randomInt = random.nextInt(50);
FileReader fr = new FileReader(file);
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
if (line.contains("!")) {
List<String> lines = new ArrayList<>();
while (line != null) {
lines.add(line);
line = reader.readLine();
Random r = new Random();
String rdmln = lines.get(r.nextInt(lines.size()));
line1.setText("Line" + rdmln);
lines.remove(rdmln);
代码的其余部分重复从'lines.add(line)'到'lines.remove(rdmln)'的过程,但是它在标签'line2'上显示'rdmln2',然后删除'rdmln2'和等等。任何人都可以看到可能导致此问题的原因吗?提前谢谢。
答案 0 :(得分:0)
您可以通过验证每个代码
来自行排查代码Random random = new Random();
int randomInt = random.nextInt(50);
检查此随机数的输出,即使您在显示的代码中的任何位置使用它,我也看不到
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
if (line.contains("!")) {
以上代码会在文本文件的第一行查找!
,如果找不到,则不会添加到您的列表中。因此,请确保您的第一行必须包含!
。
List<String> lines = new ArrayList<>();
while (line != null) {
lines.add(line);
line = reader.readLine();
Random r = new Random();
String rdmln = lines.get(r.nextInt(lines.size()));
您已声明列表的大小为0
,并开始向列表中添加元素,直到文件末尾。如果您注意到,那么您已在while循环中创建了新的Random
类实例,您将在其中传递列表大小(最初为0
但在添加第一个元素后变为1
。从技术上讲,它将返回1
,并且在每次迭代后,随机值范围也会增加,因此返回值。
这意味着,您需要查看在循环中编写的以下行
Random r = new Random();
String rdmln = lines.get(r.nextInt(lines.size()));
因为,你正在寻找随机线。然后,你的循环中应该有一个计数器来从文件中获取随机行,我在你的代码中没有看到。