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

时间:2013-03-19 15:07:02

标签: java android

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

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

3 个答案:

答案 0 :(得分:5)

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

这个公式:

r.nextInt(max - min + 1) + min
minmax都需要包含在生成的随机整数范围内时,

是合适的。当所需范围达到max但不包括r.nextInt(max - min) + min 时,公式应为:

min

我的建议是使用此功能,但0和3分别代替maxmagictext

您也可以考虑将rtext移出方法,并将其作为类的成员字段。您可以使用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)

Random#nextInt(int n)

  

返回一个伪随机数,在0之间均匀分布的int值   (包括)和指定值(不包括),由此得出   随机数发生器的序列。 nextInt的总合约是   伪随机生成指定范围内的一个int值   并返回。所有n个可能的int值都是用   (大约)相等的概率。

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

可以生成3.由于你的数组只有3个元素,它的索引将是0,1,2。试图访问magictext [3]会导致ArrayIndexOutOfBoundsException.