我最近开始使用android编程,只掌握java的基础知识。 我的代码出现问题,我的目标是在点击按钮后显示已经在我的数组中编程的随机选择的文本(onclick事件)。
public void magicbegins() //
{
int min = 0;
int max = 3;
Random r = new Random();
int rand = r.nextInt(max - min + 1) + min;
//generating random number from 0 to 3 to use as index in later event
String[] magictext = {"yes", "no", "maybe"};
TextView text = (TextView) findViewById(R.id.textView1);
//using the generated number as index for programmed string array
text.setText(magictext[rand]);
}
如果任何情况下不建议使用此代码,是否有人会提供一个示例脚本,该脚本与我的目标至少相似?
答案 0 :(得分:5)
由于您的索引需要为0,1或2,因此只需使用r.nextInt(3)
(或者,如果您对变量声明重新排序,r.nextInt(magictext.length)
)。你肯定不应该使用r.nextInt(max - min + 1)
因为偶尔会给出3,这是一个越界索引。
这个公式:
r.nextInt(max - min + 1) + min
当min
和max
都需要包含在生成的随机整数范围内时,是合适的。当所需范围达到max
但不包括r.nextInt(max - min) + min
时,公式应为:
min
我的建议是使用此功能,但0和3分别代替max
和magictext
。
您也可以考虑将r
和text
移出方法,并将其作为类的成员字段。您可以使用text
字段执行相同的操作,因此您无需每次都查找它。您可以在onCreate
方法中初始化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]);
}
字段。您的代码将如下所示:
{{1}}
答案 1 :(得分:1)
@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]);
}
答案 2 :(得分:0)
返回一个伪随机数,在0之间均匀分布的int值 (包括)和指定值(不包括),由此得出 随机数发生器的序列。 nextInt的总合约是 伪随机生成指定范围内的一个int值 并返回。所有n个可能的int值都是用 (大约)相等的概率。
int rand = r.nextInt(max - min + 1) + min;
可以生成3.由于你的数组只有3个元素,它的索引将是0,1,2。试图访问magictext [3]会导致ArrayIndexOutOfBoundsException.