0

我最近开始接触 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]);
}

如果在任何情况下不建议使用此代码,是否有人会提供一个示例脚本,该脚本至少与我的目标相似?

4

3 回答 3

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

我的建议是使用它,但分别用 0 和 3 代替minmax

您也可以考虑将方法移出magictextr移出,并使它们成为类的成员字段。您可以对字段执行相同的操作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]);
}
于 2013-03-19T15:08:58.637 回答
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]);
}
于 2013-03-19T15:14:16.680 回答
0

随机#nextInt(int n)

返回一个伪随机、均匀分布的 int 值,介于 0(包括)和指定值(不包括)之间,取自该随机数生成器的序列。nextInt 的一般约定是伪随机生成并返回指定范围内的一个 int 值。所有 n 个可能的 int 值都以(大约)相等的概率产生。

int rand = r.nextInt(max - min + 1) + min;

可以生成 3。由于您的数组只有 3 个元素,因此其索引将为 0,1,2。尝试访问 magictext[3] 会导致 ArrayIndexOutOfBoundsException.

于 2013-03-19T15:12:31.317 回答