删除arraylist字符串停止随机功能

时间:2015-08-02 04:47:39

标签: java random arraylist line

感谢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'和等等。任何人都可以看到可能导致此问题的原因吗?提前谢谢。

1 个答案:

答案 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()));

因为,你正在寻找随机线。然后,你的循环中应该有一个计数器来从文件中获取随机行,我在你的代码中没有看到。