当索引以数组大小为模时,是否有可能使索引超出约束?

Fun*_*eng -1 java

我有以下代码,但有时我会得到java.lang.ArrayIndexOutOfBoundsException特定的代码subject.gets.我不知道这怎么会发生,但它只是做到了.我有一些多线程,但这个数组是函数的本地数据,不能从其他任何地方访问.

// Within onCreate
Random random = new Random();

// some where else
List<Subject> subjects = new ArrayList<Subject>();

// There is SOME CODE HERE TO ADD ELEMENTS.
// There is SOME CODE HERE TO ADD ELEMENTS.
// There is SOME CODE HERE TO ADD ELEMENTS.
// There is SOME CODE HERE TO ADD ELEMENTS.
// There is SOME CODE HERE TO ADD ELEMENTS.

subjects.get(random.nextInt() % subjects.size())
Run Code Online (Sandbox Code Playgroud)

all*_*aya 6

如果random.nextInt()返回负整数,则mod操作的结果将为负.

请参阅注释以了解可能的解

  • 更好的是,完全忘记mod("%")并替换`random.nextInt(subjects.size())`.恕我直言... (6认同)
  • 尝试random.nextInt(Integer.MAX_VALUE); 参考:http://stackoverflow.com/questions/5827023/java-random-giving-negative-numbers (2认同)