我正在尝试制作一个测验应用程序,其中选项显示在按钮中。但我希望选项在按钮上随机显示。所以我使用随机类随机生成 0 到 3 之间的数字,然后添加它到一个数组列表。四个选项从数据库检索到一个数组。数组的索引将是数组列表的元素。
代码如下:
public void setoptions(String player_name)
{
//int arr[]=new int[4];
int ran;
Random r=new Random();
ran=r.nextInt(3 - 0 + 1) + 0;
ArrayList<Integer> c=new ArrayList<Integer>();
// c.add(ran);
//Toast.makeText(getApplicationContext(), ran+"",Toast.LENGTH_LONG).show();
for(int i=0;i<c.size();i++)
{
ran=r.nextInt(3 - 0 + 1) + 0;
if(c.contains(ran))
{
i=0;
continue;
}
else
{
c.add(ran);
}
}
c.add(ran);
optarr=dbm.getoptions(player_name);
Toast.makeText(getApplicationContext(),player_name,Toast.LENGTH_LONG).show();
btnopt1.setText(optarr[c.get(0).intValue()]);
btnopt2.setText(optarr[c.get(1).intValue()]);
btnopt3.setText(optarr[c.get(2).intValue()]);
btnopt4.setText(optarr[c.get(3).intValue()]);
// i=(int) Math.random();
//}
}
我收到以下日志:
06-04 04:45:03.697: E/AndroidRuntime(30164): FATAL EXCEPTION: main
06-04 04:45:03.697: E/AndroidRuntime(30164): Process: com.example.readfifa, PID: 30164
06-04 04:45:03.697: E/AndroidRuntime(30164): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
06-04 04:45:03.697: E/AndroidRuntime(30164): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
06-04 04:45:03.697: E/AndroidRuntime(30164): at java.util.ArrayList.get(ArrayList.java:308)
06-04 04:45:03.697: E/AndroidRuntime(30164): at com.example.readfifa.MainActivity.setoptions(MainActivity.java:226)
06-04 04:45:03.697: E/AndroidRuntime(30164): at com.example.readfifa.MainActivity$1.onItemSelected(MainActivity.java:62)
06-04 04:45:03.697: E/AndroidRuntime(30164): at android.widget.AdapterView.fireOnSelected(AdapterView.java:893)
06-04 04:45:03.697: E/AndroidRuntime(30164): at android.widget.AdapterView.access$200(AdapterView.java:48)
06-04 04:45:03.697: E/AndroidRuntime(30164): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:861)
06-04 04:45:03.697: E/AndroidRuntime(30164): at android.os.Handler.handleCallback(Handler.java:733)
06-04 04:45:03.697: E/AndroidRuntime(30164): at android.os.Handler.dispatchMessage(Handler.java:95)
06-04 04:45:03.697: E/AndroidRuntime(30164): at android.os.Looper.loop(Looper.java:137)
06-04 04:45:03.697: E/AndroidRuntime(30164): at android.app.ActivityThread.main(ActivityThread.java:4998)
06-04 04:45:03.697: E/AndroidRuntime(30164): at java.lang.reflect.Method.invokeNative(Native Method)
06-04 04:45:03.697: E/AndroidRuntime(30164): at java.lang.reflect.Method.invoke(Method.java:515)
06-04 04:45:03.697: E/AndroidRuntime(30164): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
06-04 04:45:03.697: E/AndroidRuntime(30164): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
06-04 04:45:03.697: E/AndroidRuntime(30164): at dalvik.system.NativeStart.main(Native Method)
问题似乎是arraylist只能获取一个值。那么我怎样才能在arraylist的四个位置中获取0到3之间的四个随机数。请帮忙!!
最佳答案
如果要向列表中添加 4 个元素,则需要将 for
循环条件更改为如下所示
for(int i=0; i<4; i++)
目前,当您给出 c.size()
时,如果没有添加任何元素或仅添加 1 个元素,则循环将在此时停止,并且您的列表不包含/单个元素,这给出了当您尝试访问列表中的第二个、第三个或第四个元素时,IndexOutOfBoundsException
。
关于java - 在android中生成0到3之间的随机数并添加到数组列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24033003/