java - 在android中生成0到3之间的随机数并添加到数组列表中

标签 java android eclipse

我正在尝试制作一个测验应用程序,其中选项显示在按钮中。但我希望选项在按钮上随机显示。所以我使用随机类随机生成 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/

相关文章:

eclipse - 如何将 log4j 1.2 完全集成到 Maven 构建中

java - Android 版 OpenCV : Error Program "sh" not found in PATH

java - 错误代码或异常 : How to communicate errors from model to controller in my case?

java - 函数式接口(interface)应该直接调用吗?

java - 如何安排任务定期运行?

java - 如何确保所有数据包均已收到并存储在数组中?

Android 与 ChooserActivity 崩溃

java - 在 Android 应用程序中使用 argon2 会出现 UnsatisfiedLinkError

android - 控制 ListActivity 中的各个 View

java - 如何显示飞机座位表?