Java 生成整数并将其用作字符串数组的索引

Java 生成整数并将其用作字符串数组的索引,java,android,Java,Android,我最近开始使用android编程,只掌握了java的基本知识。 我的代码有问题,我的目标是在点击按钮(onclick事件)后显示一个随机选择的文本,该文本已经在我的数组中编程 如果不建议使用此代码,是否有人提供一个示例脚本,至少与我的目标类似?由于索引需要为0、1或2,只需使用r.nextInt(3)(或者,如果重新排序变量声明,r.nextInt(magictext.length))。您当然不应该使用r.nextInt(max-min+1),因为它偶尔会给出3,这是一个越界索引 这个公式: r

我最近开始使用android编程,只掌握了java的基本知识。 我的代码有问题,我的目标是在点击按钮(onclick事件)后显示一个随机选择的文本,该文本已经在我的数组中编程


如果不建议使用此代码,是否有人提供一个示例脚本,至少与我的目标类似?

由于索引需要为0、1或2,只需使用
r.nextInt(3)
(或者,如果重新排序变量声明,
r.nextInt(magictext.length)
)。您当然不应该使用
r.nextInt(max-min+1)
,因为它偶尔会给出3,这是一个越界索引

这个公式:

r.nextInt(max - min + 1) + min
min
max
都需要包含在生成的随机整数范围内时,此参数是合适的。当所需范围达到但不包括最大值时,公式应为:

r.nextInt(max - min) + min
我的建议是使用此选项,但分别用0和3代替
min
max

您还可以考虑从代码中移动<代码> MAGICTEXT/<代码>和<代码> R>代码>,并将它们作为类的成员字段。您可以对

文本
字段执行相同的操作,因此无需每次都查找它。您可以在
onCreate
方法中初始化
text
字段。您的代码将如下所示:

private final Random r = new Random();
private final String[] magictext = {"yes", "no", "maybe"};
private TextView text;

protected void onCreate(Bundle savedInstanceState) {
    . . . // what you have now, followed by
    text = (TextView) findViewById(R.id.textView1);
}

public void magicbegins()
{
    int rand = r.nextInt(magictext.length);

    text.setText(magictext[rand]);
}

因为您的索引需要是0、1或2,所以只需使用
r.nextInt(3)
(或者,如果您重新排序变量声明,
r.nextInt(magictext.length)
)。您当然不应该使用
r.nextInt(max-min+1)
,因为它偶尔会给出3,这是一个越界索引

这个公式:

r.nextInt(max - min + 1) + min
min
max
都需要包含在生成的随机整数范围内时,此参数是合适的。当所需范围达到但不包括最大值时,公式应为:

r.nextInt(max - min) + min
我的建议是使用此选项,但分别用0和3代替
min
max

您还可以考虑从代码中移动<代码> MAGICTEXT/<代码>和<代码> R>代码>,并将它们作为类的成员字段。您可以对

文本
字段执行相同的操作,因此无需每次都查找它。您可以在
onCreate
方法中初始化
text
字段。您的代码将如下所示:

private final Random r = new Random();
private final String[] magictext = {"yes", "no", "maybe"};
private TextView text;

protected void onCreate(Bundle savedInstanceState) {
    . . . // what you have now, followed by
    text = (TextView) findViewById(R.id.textView1);
}

public void magicbegins()
{
    int rand = r.nextInt(magictext.length);

    text.setText(magictext[rand]);
}

返回0到0之间的伪随机、均匀分布的int值 (包括)和指定值(不包括),从中提取 随机数发生器的序列。nextInt的总合同为: 指定范围内的一个int值是伪随机生成的 然后回来了。所有n个可能的int值都是用 (近似)等概率

因为你的数组只有3个元素,所以它的索引是0,1,2。试图访问magictext[3]将导致出现
ArrayIndexOutOfBoundsException。

返回0到0之间的伪随机、均匀分布的int值 (包括)和指定值(不包括),从中提取 随机数发生器的序列。nextInt的总合同为: 指定范围内的一个int值是伪随机生成的 然后回来了。所有n个可能的int值都是用 (近似)等概率

因为你的数组只有3个元素,所以它的索引是0,1,2。尝试访问magictext[3]将导致出现
ArrayIndexOutOfBoundsException。

正如@Ted Hopp建议的那样

用这个

public void magicbegins() 
{
    Random r = new Random();
    int rand = r.nextInt(3);
    String[] magictext = {"yes", "no", "maybe"};

    TextView text = (TextView) findViewById(R.id.textView1);

    text.setText(magictext[rand]);
}
正如@Ted Hopp所建议的那样

用这个

public void magicbegins() 
{
    Random r = new Random();
    int rand = r.nextInt(3);
    String[] magictext = {"yes", "no", "maybe"};

    TextView text = (TextView) findViewById(R.id.textView1);

    text.setText(magictext[rand]);
}

您需要
int rand=r.nextInt(max-min)+min。在这种特定情况下,您可以只使用
rand=r.nextInt(max)+1,当最小值为0时,在任何地方加/减它都没有作用。这就是说,它通常是有效的,您需要
intrand=r.nextInt(max-min)+min。在这种特定情况下,您可以只使用
rand=r.nextInt(max)+1,当最小值为0时,在任何地方加/减它都没有作用。也就是说,它通常是有效的。我自己也没说得更好。啊,谢谢你,一定是随机整数导致了程序失败,。。谢谢你接受我的回答我自己说的再好不过了谢谢,一定是随机整数导致了当时的程序失败,。。谢谢你的回答,这不是答案,只是问题的重述,这不是答案,我只是重申一下这个问题。因为他是新来的,所以我认为完整的代码对他有好处。很抱歉,我只是在实际代码中使用了Hobo想要的代码,Ted后来更改了他的代码。因为他是新来的,所以我认为完整的代码对他有好处。很抱歉,我只是在实际代码中使用了Hobo想要的代码,Ted后来更改了他的代码。。