从我的自定义 ArrayList 类返回一个随机元素



>我已经制作了自己的 ArrayList 类的泛型版本,它需要包含一个从列表中返回随机元素的方法。这是我写的方法:

public T randomElement() throws NoSuchElementException {
    T elem;
    int rand = (int) (1 + Math.random() * size);
    elem = items[rand];
    return elem;
}

我正在使用此类/方法从我的列表中选择一个随机元素(使用从.txt文件中获取的字符),并且不断收到 NullPointerException 错误。我可以采取任何协议来确保这种情况不会发生吗?

代码中的问题是计算随机索引rand的方式:

int rand = (int) (1 + Math.random() * size);

由于1 +该值可能等于size这是列表中第一个 empy 空间的索引(至少我假设如此)。因此,在某些情况下,您返回尚未设置的索引的值 - 这是 null 。将其更改为

int rand = (int) (Math.random() * size);

NullPointerException的发生可能是由于以下两件事之一 -

  1. 项为空。检查条件并返回 null。
  2. 调用方未处理返回的 null。

无论如何,随机指数的计算是错误的。假设 ArrayList 的大小为 5,Math.random 返回 0.9。在这种情况下,

rand = (int)(1 + 0.9 * 5) = 5

这是 ArrayList 的大小,将导致越界访问。只需删除"1+"

相关内容