Java 生成整数并将其用作字符串数组的索引
我最近开始使用android编程,只掌握了java的基本知识。 我的代码有问题,我的目标是在点击按钮(onclick事件)后显示一个随机选择的文本,该文本已经在我的数组中编程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
如果不建议使用此代码,是否有人提供一个示例脚本,至少与我的目标类似?由于索引需要为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后来更改了他的代码。。