有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Remove arraylist字符串停止随机函数

多亏了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);

代码的其余部分从“行”重复该过程。添加(行)至行。删除(rdmln)”,但它会在标签“line2”上显示“rdmln2”,然后删除“rdmln2”,依此类推。有人知道是什么导致了这个问题吗?提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    通过验证每行代码,您可以自己解决代码故障

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

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