我有一个flashcard应用程序应该从用户提供的数据库中显示随机问题(因此我们没有问题的项目总数)。我使用了一个参数z,它是运行时项目数的计数,我使用了Random()方法,但每次它给我一个IllegalArgumentException。这是我的代码如何计算参数z:
while (resId1 != 0) {
resId1 = getApplicationContext().getResources().getIdentifier(
fquest + num1, "string", getPackageName());
z = z + 1;
num1 = num1 + 1;
}
此代码工作正常,但下面的代码包含异常我希望你的帮助,如果你不介意,这里的代码不好:
Random r1 = new Random(z);
num1 = r1.nextInt(z);
num1 = num1 + 1;
resId1 = getApplicationContext().getResources().getIdentifier(
fquest + num1, "string", getPackageName());
quest1 = getResources().getString(resId1);
q.setText(quest1);
IllegalArgumentException恰好在这一行:
num1 = r1.nextInt(z);
请任何帮助。
答案 0 :(得分:0)
根据文档,如果传入一个值< = 0,r1.nextInt(value)将抛出IllegalArgumentException。你检查了z的值吗?
答案 1 :(得分:0)
Random(long seed)
需要很长的参数,而nextInt(int bound)
需要一个int参数。您将变量z传递给它们,并且由于异常发生在nextInt上,因此z必须是long值。使用num1 = r1.nextInt((int)z);
将其强制转换为int,或者创建一个表示上限的新整数值。